ฉันมีปัญหาใหญ่กับคำสั่ง SQL ใน Oracle ฉันต้องการเลือก 10 อันดับแรกของระเบียนที่เรียงลำดับโดย STORAGE_DB ซึ่งไม่ได้อยู่ในรายการจากรายการเลือกอื่น
อันนี้ทำงานได้ดีสำหรับบันทึกทั้งหมด:
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')
แต่เมื่อฉันเพิ่ม
AND ROWNUM <= 10
ORDER BY STORAGE_GB DESC
ฉันได้รับการบันทึกแบบ "สุ่ม" บางอย่าง ฉันคิดว่าเพราะข้อ จำกัด เกิดขึ้นก่อนการสั่งซื้อ
ใครบางคนมีทางออกที่ดี? ปัญหาอื่น ๆ : แบบสอบถามนี้ช้าจริง ๆ (10k + บันทึก)