以下のように、現在のクエリをサブクエリに入れる必要があります:
SELECT * FROM (
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')
ORDER BY STORAGE_GB DESC )
WHERE ROWNUM <= 10
Oracleは、結果が返された後、結果にrownumを適用します。
結果が返された後に結果をフィルタリングする必要があるため、サブクエリが必要です。 RANK()関数を使用してTop-Nの結果を取得することもできます。
パフォーマンスを上げるには、NOT EXISTS
を使用してみてください。 NOT IN
の代わりに 。詳しくはこちらをご覧ください。