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 个解决方案
时间有重复就会不准确,如果非要按时间分页且时间还有重复,就先把时间排序,然后加上row_number(),然后按照这个行号分页!
实际上就是用行号代替了排完序的时间(同一时间也会有不同的行号);分页一定要是唯一的值。
分页的那个ID必须是唯一的。时间有可能重复。
如果你的ID是自增的话 就可以用ID分页。
你上面的代码比较适合表中已经存在固定的自增ID,而不是动态生成,如果是动态,你可以先做一个临时表,把数据集都加上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";
已经解决了,谢谢各位了DateTime from和DateTime not in 把这两个换成ID就没问题了,