首页 > 数据库 > mysql教程 > 如何在SQL Server中使用OFFSET和FETCH或ROW_NUMBER实现分页?

如何在SQL Server中使用OFFSET和FETCH或ROW_NUMBER实现分页?

Patricia Arquette
发布: 2025-01-10 21:02:42
原创
323 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板