我一直在try 了解一点如何在SQL中实现自定义分页,例如reading articles like this one.

我有下面的问题,它非常有效.但我想用这个实现分页.

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

What is it I want

我有论坛帖子和相关条目.我想获得最新添加条目的帖子,这样我就可以 Select 最近讨论的帖子.

现在,我希望能够获得"前10至20个最近活跃的帖子",而不是"前10".

What have I tried

我曾try 实现本文中的ROW函数,但真的没有成功.

有什么 idea 可以实现吗?

推荐答案

SQL Server 2012中,这很容易

SELECT col1, col2, ...
 FROM ...
 WHERE ... 
 ORDER BY -- this is a MUST there must be ORDER BY statement
-- the paging comes here
OFFSET     10 ROWS       -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows

如果我们想跳过订单,我们可以使用

SELECT col1, col2, ...
  ...
 ORDER BY CURRENT_TIMESTAMP
OFFSET     10 ROWS       -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows

(I'd rather mark that as a hack - but it's used, e.g. by NHibernate. To use a wisely picked up column as ORDER BY is preferred way)

要回答这个问题:

--SQL SERVER 2012
SELECT PostId FROM 
        ( SELECT PostId, MAX (Datemade) as LastDate
            from dbForumEntry 
            group by PostId 
        ) SubQueryAlias
 order by LastDate desc
OFFSET 10 ROWS -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows

引入了新的关键字offsetfetch next(仅遵循SQL标准).

But I guess, that you are not using 101, right? 在以前的版本中,这有点困难.下面是所有SQL server版本的比较和示例:here

所以,这可能在SQL Server 2008年内奏效:

-- SQL SERVER 2008
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
ORDER BY PostId

Sql相关问答推荐

数据子集的左连接

如何在SQL查询中只比较日期时间的年份和月份(而忽略日期比较)?

获取每个帖子的匹配关键字列表

计算分段的总权重

如何在PostgreSQL中对第1,1,1,1,2,2,2,2行进行编号

收到%1、%2或%2邮箱的唯一客户

多条件SQL排序行为

Oracle PL/SQL:解决DBMS输出大小限制的问题

将两列相加为同一表中的行的查询

如何将不同层次的产品组和规格组合到最深一层?

存储过程太慢

当 2 列具有静态值并且第 3 列使用运算符 IN 时,对 PostgreSQL 和 3 列上的复杂索引的最佳查询

如何在 case 语句中使用聚合?

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

批量更改WooCommerce中所有产品的税收状态

BigQuery Pivot 遗漏行

计算 SQL 中的总体成功率:递归 CTE 还是替代方法?

在 BigQuery 数据集中查找表大小和占总数据集大小的百分比

使用标准SQL 触发更新当前日期

查找距上一条记录大于或等于 30 天的记录