试试这个:
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是不可以的
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是不可以的
这个的写法犯了和我上面举例第一条SQL一样的错误,这样就是先选5条,再对其进行倒排序select * from (select field,rownum rn from table order by rn desc) where rownum<=5;
这条是对的,我怎么没想到这样替换一下???谢谢楼上帮助,受益匪浅
(select max(rownum) from table)你这句话犯的错误可不只一个排序是在先,还是在后。
rownum的操作是不可以用rownum>X这样的,只能是rownum<=X
楼主可以试试,在不需要要排序的情况下,取出第2到第4条记录(用rownum between 2 and 4或者rownum>=2 and rownum<=4),看看你能取得结果不能。
看看論壇的FAQ`
而你的 select * from (select field,rownum rn from table order by rn desc) where rownum<=5;是不行的,因为rownum 对于每一条记录来说是已经定了的 它是不会改变的
公式.可以在SQLPLUS下测试的
select * from
(
select rownum rm,a.* from
(select * from tablename) a
where rownum<=&maxv
)
where rm>=&minv
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
SELECT * FROM
(
SELECT * FROM TABLE ORDER BY ROWID DESC
)
WHERE ROWNUM < 6>=的操作符,不可以用在rownum上面。