Eu tenho um grande problema com uma instrução SQL no Oracle. Desejo selecionar os 10 melhores registros ordenados por STORAGE_DB que não estão em uma lista de outra instrução de seleção.
Este funciona bem para todos os registros:
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')
Mas quando estou adicionando
AND ROWNUM <= 10
ORDER BY STORAGE_GB DESC
Estou recebendo algum tipo de registro "aleatório". Eu acho que porque o limite ocorre antes do pedido.
Alguém tem uma boa solução? O outro problema: Esta consulta é muito lenta (10k + registros)