日期:2014-05-16  浏览次数:20459 次

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
------解决方案--------------------
如果是2005及以后的版本,可以用row_number函数:
select *
from 
(
select *,
       ROW_NUMBER() over(order by DateTime desc) rownum
from Base_Sale 
)t
where rownum <= 20

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