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


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

10 个解决方案

#1


你用的是2000,还是2005呢

#2


如果是2005及以后的版本,可以用row_number函数:
select *
from 
(
select *,
       ROW_NUMBER() over(order by DateTime desc) rownum
from Base_Sale 
)t
where rownum <= 20

#3


我用的是2008

#4


时间有重复就会不准确,如果非要按时间分页且时间还有重复,就先把时间排序,然后加上row_number(),然后按照这个行号分页!
实际上就是用行号代替了排完序的时间(同一时间也会有不同的行号);分页一定要是唯一的值。

#5


分页的那个ID必须是唯一的。时间有可能重复。
如果你的ID是自增的话 就可以用ID分页。

#6


引用 5 楼 fredrickhu 的回复:
分页的那个ID必须是唯一的。时间有可能重复。
如果你的ID是自增的话 就可以用ID分页。

按照上面的写法,这SQL 应该怎么修改啊

#7


在分页前就要对整个数据集进行编号,不能分页才编号

#8


引用 7 楼 DBA_Huangzj 的回复:
在分页前就要对整个数据集进行编号,不能分页才编号

针对这个sql 要如何修改啊,小弟我刚学习

#9


你上面的代码比较适合表中已经存在固定的自增ID,而不是动态生成,如果是动态,你可以先做一个临时表,把数据集都加上ID,然后你上面的代码中表名换成临时表

#10


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就没问题了,
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告