>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 OFFSET 및 FETCH 또는 ROW_NUMBER를 사용하여 페이지 매김을 구현하는 방법은 무엇입니까?

SQL Server에서 OFFSET 및 FETCH 또는 ROW_NUMBER를 사용하여 페이지 매김을 구현하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-10 21:02:42327검색

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 서버 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.