为了在SQL中实现自定义分页并从大型数据集中检索特定数量的记录,您需要使用跳过和获取功能。以下是使用SQL查询实现此目的的方法演示。
查询语句
您有一个查询,它从包含论坛条目的表中检索PostId,按PostId分组,并按每个帖子的最大DateMade排序。此查询运行良好,但您希望向其中添加分页功能。
解决方案
对于SQL Server 2012及以上版本
从SQL Server 2012开始,您可以使用OFFSET和FETCH NEXT子句轻松跳过和获取记录。修改后的查询如下所示:
<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>
对于SQL Server 2008
在SQL Server 2008中,您可以使用ROW_NUMBER()为每条记录分配一个顺序号,然后应用过滤器来选择所需的记录。以下是修改后的查询:
<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 > @Start AND RowNumber <= @End;</code>
以上是如何通过SQL查询实现分页的Skip和Take功能?的详细内容。更多信息请关注PHP中文网其他相关文章!