ホームページ >データベース >mysql チュートリアル >SQL Server で OFFSET と FETCH または ROW_NUMBER を使用してページネーションを実装するにはどうすればよいですか?

SQL Server で OFFSET と FETCH または ROW_NUMBER を使用してページネーションを実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-10 21:02:42326ブラウズ

How to Implement Pagination with OFFSET and FETCH or ROW_NUMBER in SQL Server?

SQL ページングの実装: SKIP キーワードと TAKE キーワードを使用する

問題の説明

あなたは、各投稿の最新のエントリに基づいて、最近議論されたフォーラムの投稿を取得するクエリを処理しています。このクエリを拡張してページネーションをサポートし、特にユーザーが「最近アクティブな 10 番目から 20 番目の投稿」などの特定の範囲の投稿を取得できるようにしたいと考えています。

答え

SQL Server 2012 以降

SQL Server 2012 以降では、OFFSET キーワードと FETCH キーワードを使用してページングを簡単に実装できます。

<code class="language-sql">SELECT PostId
FROM (
    SELECT PostId, MAX(Datemade) AS LastDate
    FROM dbForumEntry
    GROUP BY PostId
) SubQueryAlias
ORDER BY LastDate DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;</code>

このクエリは、最初の 10 行 (オフセット) をスキップし、次の 10 行を取得します。

SQL Server 2008

SQL Server 2008 では、次の手法を使用できます。

<code class="language-sql">DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 10, @End = 20;

WITH PostCTE AS (
    SELECT PostId, MAX(Datemade) AS LastDate
        ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber
    FROM dbForumEntry
    GROUP BY PostId
)
SELECT PostId, LastDate
FROM PostCTE
WHERE RowNumber BETWEEN @Start + 1 AND @End
ORDER BY RowNumber;</code>

このクエリは、共通テーブル式 (CTE) を使用して各投稿の行番号を生成します。次に、WHERE 句によって結果がフィルタリングされ、指定された範囲内の投稿のみが含まれます。また、ORDER BY 句によって、投稿が PostId の昇順で返されるようになります。

以上がSQL Server で OFFSET と FETCH または ROW_NUMBER を使用してページネーションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。