您正在处理一个查询,该查询根据每个帖子的最新条目检索最近讨论的论坛帖子。您希望扩展此查询以支持分页,特别是允许用户检索特定范围的帖子,例如“最近活跃的第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中文网其他相关文章!