T-SQL:使用TIES分页
我试图实现一个有点不同的寻呼程序.
为了一个简单的例子,我们假设我有一个定义和填充的表,如下所示: DECLARE @Temp TABLE ( ParentId INT,[TimeStamp] DATETIME,Value INT ); INSERT INTO @Temp VALUES (1,'1/1/2013 00:00',6); INSERT INTO @Temp VALUES (1,'1/1/2013 01:00',7); INSERT INTO @Temp VALUES (1,'1/1/2013 02:00',8); INSERT INTO @Temp VALUES (2,6); INSERT INTO @Temp VALUES (2,7); INSERT INTO @Temp VALUES (2,8); INSERT INTO @Temp VALUES (3,6); INSERT INTO @Temp VALUES (3,7); INSERT INTO @Temp VALUES (3,8); 时间戳将始终是相同的间隔,例如每日数据,1小时数据,1分钟数据等.不会混合. 为了报告和呈现目的,我想实现分页: > TimeStamp订单 所以运行此查询的pageSize为4将返回6条记录.默认情况下,有3小时00:00和1小时01:00,但是因为01:00小时,所以pageSize将被覆盖,所有小时00:00和01:00. 这是我到目前为止,我认为我很接近,因为它适用于第一次迭代,但下一个pageSize行的后续查询不起作用. WITH CTE AS ( SELECT ParentId,[TimeStamp],Value,RANK() OVER(ORDER BY [TimeStamp]) AS rnk,ROW_NUMBER() OVER(ORDER BY [TimeStamp]) AS rownum FROM @Temp ) SELECT * FROM CTE WHERE (rownum BETWEEN 1 AND 4) OR (rnk BETWEEN 1 AND 4) ORDER BY TimeStamp,ParentId ROW_NUMBER确保满足最小pageSize,但RANK将包含额外的关系. 解决方法我认为你使用row_number()和rank()的策略是过于复杂的事情.只需从数据中挑选前4个时间戳.然后选择与之匹配的任何时间戳: select * from @temp where [timestamp] in (select top 4 [timestamp] from @temp order by [TimeStamp]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sqlserver 临时表 游标 存储过程拼sql 日期函数等
- sql-server – 可以使用select返回多个标识来插入SQL吗?
- sql-server – 在SQL Server 2008 R2 Express中发送SMTP邮件
- SqlServer 分页存储过程
- 介绍一个开源的在线管理SQLServer的小工具--SQLEntMan
- CentOS下Redis数据库的基本安装与配置教程
- MSSQL转MYSQL,gb2312转utf-8无乱码解决方法
- SQLSERVER 错误返回代码含义一览
- sql-server – 最佳SQL Server Reporting Services设置
- SQL Server 不存在或访问被拒绝(转)