问题描述:
表A有n(n>10000)条记录,现在想每次从A表中取出10条记录(不足10的全部取出),
要求每次查询从上次查询的最后一条开始取10条.记录集按时间排序。(再次说明:oracle数据库)比如:         a          b         c       记录时间
         --        ---       --- -------------------
         7          0         84 2007-04-28 10:00:00
         7          0         85 2007-04-28 10:00:00
         7          0         86 2007-04-28 10:00:00
         7          0         87 2007-04-28 10:00:00
         7          0         88 2007-04-28 10:00:00
         7          0         89 2007-04-28 10:00:00
         7          0         94 2007-04-28 10:00:00
         7          0         95 2007-04-28 10:00:00
         7          0         96 2007-04-28 10:00:00
         7          0        103 2007-04-28 10:00:00         7          0        104 2007-04-28 10:00:00
         7          0        105 2007-04-28 10:00:00
         7          0        106 2007-04-28 10:00:00
         7          0        107 2007-04-28 10:00:00
         7          0        108 2007-04-28 10:00:00
         7          0        115 2007-04-28 10:00:00
         7          0        116 2007-04-28 10:00:00
         7          0        117 2007-04-28 10:00:00
         7          0        118 2007-04-28 10:00:00
         7          0        119 2007-04-28 10:00:00
         7          0        120 2007-04-28 10:00:00
         7          0        121 2007-04-28 10:00:00         7          0        122 2007-04-28 10:00:00
         7          0        123 2007-04-28 10:00:00
         7          0        124 2007-04-28 10:00:00
         7          0        125 2007-04-28 10:00:00
         7          0        126 2007-04-28 10:00:00
         7          0        127 2007-04-28 10:00:00
         7          0        128 2007-04-28 10:00:00
         7          0        129 2007-04-28 10:00:00
         7          0        130 2007-04-28 10:00:00
         7          0        131 2007-04-28 10:00:00
         7          0        132 2007-04-28 10:00:00
             ......
第一次取出1~10条 (上面字段c 的值从84到103);
第二次取出11~20条 (上面字段c的值从104到121);
  ...
依次类推...请高手指教,可行就给分。

解决方案 »

  1.   

    select * from tab where rownum>11
      

  2.   


    你排序后,加个 TOP 10 就可以了。TOP n 限定返回记录集的行数。
      

  3.   

    select * from tab where rownum>11================================
    不行的,只有rownum>=1 语句才能执行
      

  4.   

    你排序后,加个 TOP 10 就可以了。TOP n 限定返回记录集的行数。==================================
    oracle 不支持top
      

  5.   

    select * from tab where rownum>=10;
      

  6.   


    Oracle 不支持 Top 吗?不好意思,我没有用过 Oracle 数据库。
      

  7.   

    select A.a,A.b,A.c
     from (select row_number() over(order by c) num,a,b,c
             from 表A)A
    where num > startnum
      and num <= endnum
      

  8.   

    SELECT A,B,C
    FROM (
           SELECT ROWNUM AS RNUM, A,B,C FROM TABLENAME ORDER BY 记录时间
         )
    WHERE RNUM BETWEEN StartNUM AND (StartNUM + 10)
      

  9.   


    SELECT A,B,C
    FROM (
           SELECT ROWNUM AS RNUM, A,B,C FROM TABLENAME ORDER BY 记录时间
         )
    WHERE RNUM > (I * 10) AND RNUM < (I  * 10 + 11)
    I为挑取的次数,第一次则为1,第二次则为2,依次类推
      

  10.   

    zqz117(南瓜少爷)  的方案可行,在“select row_number() over(order by c) num,a,b,c
             from 表A”
    里加一个rownum<N ;查询速度就更快了。
    谢谢 zqz117(南瓜少爷) 。===============================
    在试试
    DragonBill(用户中文昵称------静观其变,以静制动) 
    的方案,
    一会儿结贴
      

  11.   

    后面回复的都是正确的
    rownum是伪列,需要子查询先查出来再操作.
    否则,不能用>,只能是从1开始用<
      

  12.   

    谢谢各位老大,结贴了。
    zqz117(南瓜少爷)                                         80   
    DragonBill(用户中文昵称------静观其变,以静制动)         15
    HelloWorld_001() ( )                                     5
      

  13.   

    这里给你写一个匿名块你自己去改:(由于我这里没装ORACLE,就在MS SQL 2005写个,不管在那个中都一样,只要做简单的修改)
    /**
    *
    *程序开始
    *
    **/
    declare 
    @PageStart int,--记录起始记录的位置
    @PageSize int,--每次要查询的数量(你可以固定 为 10)
    @Amount int;--查询总条数
    begin  
    set @PageStart=1;
    set @PageSize=10;
    set @Amount=(select count(*) from t_user )
    while(@PageStart<@Amount)
    begin
    WITH Headers AS
    ( SELECT id,[name], ROW_NUMBER() OVER (order by times   )as RowNumber 
      FROM t_user 
        )
     SELECT * FROM Headers WHERE RowNumber between @PageStart and @PageStart+@PageSize-1;set @PageStart=@PageStart+@PageSize ;
    end
    end
    /**
    *
    *程序结束
    *
    **/
      

  14.   

    select top 20(*) from
    (
      select I*20 from table1 desc 
    ) a此类似于分页技术!
      

  15.   

    非常感谢  longmarch2008() ( ) ,可惜已结贴了,不然给你另加100分。
      

  16.   

    longmarch2008() 你用过ORACLE没有啊??那里那样声明变量给变量赋值的啊?
      

  17.   

    xtsanshao()  
    ORACLE用过,我说了我哪个时候自己电脑上面没装ORACLE,用得是ms SQL 写的,