Oracle 前 10 筆記錄選擇(含日期排除)
本文解決了常見的 Oracle 資料庫挑戰:檢索按特定列排序的前 10 筆記錄,同時從另一個表中排除與特定條件相符的記錄。 由於這些元素的相互作用,帶有 SELECT DISTINCT
和 ORDER BY
子句的簡單 ROWNUM
是不夠的。
此解決方案利用子查詢來實現所需的結果:
<code class="language-sql">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 NOT EXISTS ( SELECT 1 FROM HISTORY h2 WHERE h2.APP_ID = HISTORY.APP_ID AND TO_CHAR(h2.HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009' ) ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10;</code>
此方法首先過濾內部查詢中的 HISTORY
表。 NOT EXISTS
子句有效地排除 APP_ID
與 HISTORY_DATE
等於「06.02.2009」的記錄相符的記錄。 然後結果按 STORAGE_GB
排序(降序)。外部查詢套用 ROWNUM <= 10
約束,確保僅傳回前 10 筆記錄。 此方法在過濾和排序之後正確應用行限制,保證準確的結果。
通常比 NOT EXISTS
提供更好的效能,特別是對於大型資料集。 請查閱 Oracle 文件以了解進一步的效能最佳化策略。 NOT IN
以上是如何在排除特定日期的情況下選擇前 10 筆 Oracle 記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!