根据输入的Cibid先取得当前行的cdtRecordTime,然后再在条件中根据上一页或者下一页添加相应的过滤条件与排序内容。
例如:假设每一页10条记录要求下一页的数据 
输入的 Cibid为@id (此时输入的应为当前页最后一条记录的Cibid[注意不一定是当前页最大的Cibid])
Declare @time Datetime
Select @time = cdtRecordTime From Tbbinfo Where ciBid = @id --取出当前行的时间Select Top 10 * From Tbbinfo 
Where cdtRecordTime<=@time And ciBid>@id
Order by cdtRecordTime DESC,ciBid即为所求要求上一页的数据 
输入的 Cibid为@id (此时输入的应为当前页第一条记录的Cibid[注意不一定是当前页最小的Cibid])
Declare @time Datetime
Select @time = cdtRecordTime From Tbbinfo Where ciBid = @id --取出当前行的时间Select Top 10 * From Tbbinfo 
Where cdtRecordTime>=@time And ciBid<@id
Order by cdtRecordTime DESC,ciBid DESC即为所求,不过此时应对取得的结果重新按照 Order by cdtRecordTime DESC,ciBid 再次进行排序以上思路不知是否可行,仅供参考

解决方案 »

  1.   

    Xcrow(无涯) 谢谢
    Select Top 10 * From Tbbinfo
    Where cdtRecordTime<=@time And ciBid>@id
    Order by cdtRecordTime DESC,ciBid
    分析:ciBid>@id应该是不行的,ciBid并不是顺序的,同一个cdtRecordTime或者<=@time的CiBid也并不一定会小于@id,显然不行.另时间比较最好用Datediff我就不说了,不过我明天再试试,谢谢.!
      

  2.   

    第N頁:
    Declare @N numeric
    select top 10 * from tblinfo where ciBid not in (select top N*10 ciBid order by cdtRecordTime desc,ciBid) order by cdtRecordTime desc,ciBid
      

  3.   

    我做过测试,30万的数据使用
    select top 10 * from tablename where id not in(select top x from tablename order by col1) order by col1这个的原型平均分页的速度在1妙多点。
    (p4 2.8e,512M内存,win2k,sql 2000)
      

  4.   

    对不起,条件修改一下应该就可以了Select Top 10 * From Tbbinfo 
    Where (cdtRecordTime=@time And ciBid>@id)or cdtRecordTime<@time
    Order by cdtRecordTime DESC,ciBid-------------------
    Select Top 10 * From Tbbinfo 
    Where (cdtRecordTime=@time And ciBid<@id) or cdtRecordTime>@time
    Order by cdtRecordTime DESC,ciBid DESC********************时间比较为什么必须用 datediff ? 这里的比较只需要知道谁大谁小,并不需要知道具体的时间间隔,不是吗?
      

  5.   

    對3F自己的方法我覺得可以改進效率,效率應該要好些:

    “select top 10 * from tblinfo where ciBid not in (select top N*10 ciBid order by cdtRecordTime desc,ciBid) order by cdtRecordTime desc,ciBid”
    改成:
    select top 10 * from (select top (N+1)*10 ciBid order by cdtRecordTime desc,ciBid) order by cdtRecordTime ,ciBid desc
    不過這樣得出來的順序有點問題,可以再加上:select * from ... order by cdtRecordTime desc,ciBid就OK了