试试这个:
select * from (select field,rownum rn from table) where rownum<=5 order by r desc;
或者
select * from (select field,rownum rn from table order by rn desc) where rownum<=5;between运算最终会被翻译成  x>=2 and x<=5 这种形式的 rownum不能用>=例如 select * from table where rowum>=2是不可以的

解决方案 »

  1.   

    select * from (select field,rownum rn from table) where rownum<=5 order by r desc;
    这个的写法犯了和我上面举例第一条SQL一样的错误,这样就是先选5条,再对其进行倒排序select * from (select field,rownum rn from table order by rn desc) where rownum<=5;
    这条是对的,我怎么没想到这样替换一下???谢谢楼上帮助,受益匪浅
      

  2.   

    select * from table where rownum between (select max(rownum)-5 from table) and
    (select max(rownum) from table)你这句话犯的错误可不只一个排序是在先,还是在后。
    rownum的操作是不可以用rownum>X这样的,只能是rownum<=X
    楼主可以试试,在不需要要排序的情况下,取出第2到第4条记录(用rownum between 2 and 4或者rownum>=2 and rownum<=4),看看你能取得结果不能。
      

  3.   

    rownum 可以
    看看論壇的FAQ`
      

  4.   

    ORARichard(没钱的日子......) 的方法可行的 
    而你的 select * from (select field,rownum rn from table order by rn desc) where rownum<=5;是不行的,因为rownum 对于每一条记录来说是已经定了的 它是不会改变的
      

  5.   

    参考:
    公式.可以在SQLPLUS下测试的
    select * from 
     (
     select rownum rm,a.* from 
                          (select * from tablename) a 
     where rownum<=&maxv
     )
    where rm>=&minv
      

  6.   

    使用分析函数rank()select area_code,sum(local_fare) local_fare,
    rank() over (order by sum(local_fare) desc) fare_rank
    from t
    group by area_codeAREA_CODE      LOCAL_FARE  FARE_RANK
    ---------- -------------- ----------
    5765            104548.72          1
    5761             54225.41          2
    5763             54225.41          2
    5764             53156.77          4
    5762             52039.62          5
      

  7.   

    最后5条记录:
    SELECT * FROM
    (
      SELECT * FROM TABLE ORDER BY ROWID DESC
    )
    WHERE ROWNUM < 6>=的操作符,不可以用在rownum上面。