日付を除外した 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
が「06.02.2009」に等しい HISTORY_DATE
を持つレコードと一致するレコードを効率的に除外します。 結果は STORAGE_GB
(降順) で並べられます。外側のクエリは ROWNUM <= 10
制約を適用し、上位 10 レコードのみが返されるようにします。 このメソッドは、フィルタリングと並べ替えの後に行制限を正しく適用し、正確な結果を保証します。
注: NOT EXISTS
は、一般に、このタイプの除外では、特に大規模なデータセットの場合、NOT IN
よりも優れたパフォーマンスを提供します。 さらなるパフォーマンス最適化戦略については、Oracle のドキュメントを参照してください。
以上が特定の日付を除外して上位 10 件の Oracle レコードを選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。