ホームページ > データベース > mysql チュートリアル > 特定の日付を除外して上位 10 件の Oracle レコードを選択するにはどうすればよいですか?

特定の日付を除外して上位 10 件の Oracle レコードを選択するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-18 15:36:10
オリジナル
304 人が閲覧しました

How to Select the Top 10 Oracle Records While Excluding Specific Dates?

日付を除外した 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート