J'ai un gros problème avec une instruction SQL dans Oracle. Je souhaite sélectionner les 10 meilleurs enregistrements classés par STORAGE_DB qui ne figurent pas dans une liste d'une autre instruction SELECT.
Celui-ci fonctionne bien pour tous les enregistrements:
SELECT DISTINCT
APP_ID,
NAME,
STORAGE_GB,
HISTORY_CREATED,
TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE
FROM HISTORY WHERE
STORAGE_GB IS NOT NULL AND
APP_ID NOT IN (SELECT APP_ID
FROM HISTORY
WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009')
Mais quand j'ajoute
AND ROWNUM <= 10
ORDER BY STORAGE_GB DESC
Je reçois une sorte de disques "aléatoires". Je pense parce que la limite a lieu avant la commande.
Quelqu'un a-t-il une bonne solution? L'autre problème: cette requête est vraiment lente (10k + enregistrements)