使用此查询实现分页(跳过/获取)功能

13 浏览
0 Comments

使用此查询实现分页(跳过/获取)功能

我一直在尝试了解如何在SQL中实现自定义分页,比如阅读像这篇文章这样的文章。

我有以下查询,它运行得很完美。但我想在这个查询中实现分页。

SELECT TOP x PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate
 from dbForumEntry 
 group by PostId ) SubQueryAlias
 order by LastDate desc

我想要什么

我有论坛帖子,带有相关的条目。我想获取最新添加条目的帖子,这样我可以选择最近讨论的帖子。

现在,我想要能够获取"最近活跃的10到20个帖子",而不仅仅是"前10个"。

我尝试了什么

我尝试实现类似文章中的ROW函数,但没有成功。

有没有什么建议如何实现呢?

0
0 Comments

在SQL Server 2012中,实现分页功能(跳过/获取)非常容易。只需要使用OFFSET和FETCH NEXT关键字即可。如果不想使用ORDER BY语句,可以使用当前时间戳作为ORDER BY字段。在SQL Server 2008中,也可以实现分页功能,但稍微复杂一些。需要使用ROW_NUMBER()函数和公共表表达式(CTE)来实现分页。

在SQL Server 2012中,新引入了OFFSET和FETCH NEXT关键字,遵循SQL标准。但是,如果你没有使用SQL Server 2012版本,就需要使用其他方法来实现分页。在SQL Server 2008中,可以使用ROW_NUMBER()函数和CTE来实现分页。下面是一个示例代码:

-- SQL SERVER 2008
DECLARE @StartRow INT;
DECLARE @EndRow INT;
SELECT @StartRow = 10, @EndRow = 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 > @StartRow AND RowNumber <= @EndRow
ORDER BY PostId

对于SQL Server 2012的示例,需要注意的是ORDER BY语句是必需的,否则会报语法错误。在SQL Server 2008的示例中,你可以调整ROW_NUMBER()函数的ORDER BY子句来实现想要的排序方式。

此外,还有一些关于分页的问题。例如,第一行是从1开始还是从0开始计数?在示例代码中,第一行是从1开始计数。如果想获取前1000行,WHERE子句应该是`WHERE RowNumber >= 0 AND RowNumber <= 1000`。

还有一个问题是关于使用OFFSET的性能问题。OFFSET会导致SQL Server从磁盘中获取所有数据,因此并不是一个高效的方法。如果不想使用OFFSET,可以尝试其他方法来实现分页功能。

总之,根据不同的SQL Server版本,可以使用不同的方法来实现分页功能。在SQL Server 2012中,可以使用OFFSET和FETCH NEXT关键字来实现分页,而在SQL Server 2008中,可以使用ROW_NUMBER()函数和CTE来实现分页。同时,需要注意一些细节问题,如ORDER BY的必要性、行数计数的起始值等。

0
0 Comments

在查询语句中实现分页功能的需求是非常常见的。当我们需要从数据库中检索大量数据时,为了提高查询性能和减少网络传输的开销,我们通常希望将查询结果分成多个页面进行展示,而不是一次性将所有数据返回。

然而,在某些情况下,我们可能只希望从查询结果中获取其中的一部分数据,而不是一次性获取所有数据。这就需要使用分页功能,即跳过一定数量的记录(skip)并获取接下来的一定数量的记录(take)。

在给定的示例中,我们可以看到使用了OFFSET和FETCH NEXT关键字来实现分页功能。OFFSET用于指定要跳过的记录数量,FETCH NEXT用于指定要获取的记录数量。在这个例子中,我们跳过了10条记录,然后获取接下来的10条记录。

这种分页功能的实现可以大大提高查询效率,特别是在处理大量数据时。通过将数据分成多个页面,我们可以逐步加载和展示数据,减少了一次性加载所有数据的开销。

要在查询语句中实现分页功能,只需要在查询语句的末尾添加上述的OFFSET和FETCH NEXT语句即可。具体的使用方法是,将OFFSET后面的数字替换为要跳过的记录数量,将FETCH NEXT后面的数字替换为要获取的记录数量。

例如,如果我们希望从查询结果中获取第11到第20条记录,可以使用以下查询语句:

SELECT * FROM table_name OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

这样,我们就可以实现分页功能,只获取指定范围内的数据。

总结起来,分页功能在处理大量数据时非常重要。通过使用OFFSET和FETCH NEXT关键字,我们可以轻松地实现分页功能,提高查询效率和减少网络传输的开销。通过逐步加载和展示数据,我们可以更好地优化用户体验。

0
0 Comments

在SQL Server中实现分页(跳过/获取)功能的原因是为了按照某一列对查询进行排序,从而可以指定所需的行数。

解决方法是使用order by子句按照某一列对查询进行排序,并使用offsetFETCH NEXT子句来指定要获取的行数。以下是一个示例:

select * from table order by [some_column] 
offset 10 rows
FETCH NEXT 10 rows only

需要注意的是,在这种情况下不能使用TOP关键字。

如果想了解更多信息,可以参考以下链接:

https://technet.microsoft.com/pt-br/library/gg699618%28v=sql.110%29.aspx

0