ホームページ >データベース >mysql チュートリアル >SQL Server 2005 で各カテゴリの上位 10 レコードを取得するにはどうすればよいですか?
SQL Server 2005 のカテゴリごとの上位 10 レコードの抽出
このガイドでは、SQL Server 2005 テーブルからカテゴリ (ビジネス、ローカル、機能) ごとに上位 10 件のレコードを効率的に取得し、エントリ日順に並べ、日付範囲でフィルタリングする方法を説明します。
SQL アプローチ:
このソリューションはサブクエリとウィンドウ関数を利用します。サブクエリはデータをカテゴリ (Section
列) ごとに分割し、降順の RankCriteria
(日付など) に基づいて各パーティション内のレコードをランク付けします。次に、メイン クエリはランクが 10 以下のレコードのみを選択します。
<code class="language-sql">SELECT rs.Field1, rs.Field2 FROM ( SELECT Field1, Field2, RANK() OVER (PARTITION BY Section ORDER BY RankCriteria DESC) AS Rank FROM table ) rs WHERE Rank <= 10;</code>
重要な注意事項:
RankCriteria
値を共有する場合、RANK()
関数はそのカテゴリに対して 10 を超えるレコードを返すことがあります。RankCriteria
列に各カテゴリ内で一意の値が含まれていることを確認します。 同順位であっても厳密な順序付けが必要な場合は、ROW_NUMBER()
の代わりに RANK()
を使用することを検討してください。 ROW_NUMBER()
は、同順位に関係なく、各行に一意のランクを割り当てます。この最適化されたクエリは、SQL Server 2005 のカテゴリごとに上位 N レコードを取得するための堅牢なソリューションを提供します。table
、Field1
、Field2
、および RankCriteria
を実際のテーブル名と列名に置き換えてください。 内部クエリに WHERE
句を追加すると、必要に応じて日付範囲でフィルタリングできるようになります。
以上がSQL Server 2005 で各カテゴリの上位 10 レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。