none
分页取记录,时间相同怎么处理 RRS feed

  • 问题

  • 数据库: SQL SERVER 2008 R2 Express
    查询1:tabA的聚簇索引为time1 ,排序desc

    select * from (

         select top(50) *

         from (

              select  top(150) field1, field2, time1

              from tabA

         )  tabB

         order by time1 asc

    ) tabC

    order by time1 desc

    查询2:

    select *

    from (

           select  top(150) row_number over(order by time1 desc)  as rowno, field1, field2, time1

           from tabA

    ) tabB

    where rowno between 100 and 150

    order by rowno asc

    查询1、 查询2 均可实现分页查询。但是在记录>700w情况下,查询2效率较低,发现使用row_number的原因导致,因为取消row_number,查询时间明显缩短。

    所以想使用查询1 实现分页,但是查询1对时间相同的情况, 使用正序和倒序返回的结果不一样。

    例如下表

    select * from test order by logtime desc ,结果集时间相同的按照id 从 小 到 大 排序;

    select * from test order by logtime asc , 结果集时间相同的按照id 从 大 到 小 排序;

    问:

    1) 时间为主键,时间相同情况下,不同的排序方式,ID显示的顺序不同(从小到大 或 从大到小),这个不解。

    2)假如主键确定为时间的情况下,这两种显示顺序是否是确定的。

     






    • 已编辑 Y.P. _ 2011年10月10日 8:19
    2011年10月10日 3:45

答案

  • 您好,

    请问你想到得到什么样的结果?你可以在order by 加上 id, 这样ID 在时间相同的情况下显示顺序就相同了。

    select * from @mytable order by logintime, id

    select * from @mytable order by logintime desc, id


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.
    2011年10月13日 2:22
    版主

全部回复

  • 您好,

    请问你想到得到什么样的结果?你可以在order by 加上 id, 这样ID 在时间相同的情况下显示顺序就相同了。

    select * from @mytable order by logintime, id

    select * from @mytable order by logintime desc, id


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.
    2011年10月13日 2:22
    版主
  • 您好,

    请问你想到得到什么样的结果?你可以在order by 加上 id, 这样ID 在时间相同的情况下显示顺序就相同了。

    select * from @mytable order by logintime, id

    select * from @mytable order by logintime desc, id


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.

    这也是一种方法,谢谢这么详细的给图。
    2011年10月13日 9:11