mssql 按时间分页的问题 按时间分页不准确,按照ID分页没问题,这个是怎么回事呢?求哥哥姐姐帮忙

dlredapple 2014-03-13 08:51:20
string sql = " select top " + NumPerPage + " * from Base_Sale where DateTime not in (select top " + ((PageNum - 1) * NumPerPage) + " DateTime from Base_Sale where 1=1 " + GetWhere() + " order by DateTime desc) " + GetWhere() + " order by DateTime desc";
如果用ID进行分页的话查出来的结果是没有问题的,可是用时间进行分页,查出来的结果不准确,请教还有别的写法吗?

select top 20 * from Base_Sale where DateTime not in (select top 40 DateTime from Base_Sale where 1=1 order by DateTime desc) order by DateTime desc
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-03-13
  • 打赏
  • 举报
回复
你上面的代码比较适合表中已经存在固定的自增ID,而不是动态生成,如果是动态,你可以先做一个临时表,把数据集都加上ID,然后你上面的代码中表名换成临时表
dlredapple 2014-03-13
  • 打赏
  • 举报
回复
引用 7 楼 DBA_Huangzj 的回复:
在分页前就要对整个数据集进行编号,不能分页才编号
针对这个sql 要如何修改啊,小弟我刚学习
發糞塗牆 2014-03-13
  • 打赏
  • 举报
回复
在分页前就要对整个数据集进行编号,不能分页才编号
dlredapple 2014-03-13
  • 打赏
  • 举报
回复
引用 5 楼 fredrickhu 的回复:
分页的那个ID必须是唯一的。时间有可能重复。 如果你的ID是自增的话 就可以用ID分页。
按照上面的写法,这SQL 应该怎么修改啊
--小F-- 2014-03-13
  • 打赏
  • 举报
回复
分页的那个ID必须是唯一的。时间有可能重复。 如果你的ID是自增的话 就可以用ID分页。
Yole 2014-03-13
  • 打赏
  • 举报
回复
时间有重复就会不准确,如果非要按时间分页且时间还有重复,就先把时间排序,然后加上row_number(),然后按照这个行号分页! 实际上就是用行号代替了排完序的时间(同一时间也会有不同的行号);分页一定要是唯一的值。
dlredapple 2014-03-13
  • 打赏
  • 举报
回复
我用的是2008
LongRui888 2014-03-13
  • 打赏
  • 举报
回复
如果是2005及以后的版本,可以用row_number函数:
select *
from 
(
select *,
       ROW_NUMBER() over(order by DateTime desc) rownum
from Base_Sale 
)t
where rownum <= 20
LongRui888 2014-03-13
  • 打赏
  • 举报
回复
你用的是2000,还是2005呢
dlredapple 2014-03-13
  • 打赏
  • 举报
回复
string sql = " select top " + NumPerPage + " * from Base_Sale where DateTime not in (select top " + ((PageNum - 1) * NumPerPage) + " DateTime from Base_Sale where 1=1 " + GetWhere() + " order by DateTime desc) " + GetWhere() + " order by DateTime desc"; 已经解决了,谢谢各位了DateTime from和DateTime not in 把这两个换成ID就没问题了,

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧