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)