Bạn sẽ cần đặt truy vấn hiện tại của mình vào truy vấn con như sau:
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 áp dụng rownum cho kết quả sau khi nó được trả về.
Bạn cần lọc kết quả sau khi nó được trả về, vì vậy cần có một truy vấn con. Bạn cũng có thể sử dụng hàm RANK () để nhận kết quả Top-N.
Để biết hiệu suất, hãy thử sử dụng NOT EXISTS
thay cho NOT IN
. Xem cái này để biết thêm.