如何从Oracle中的表中选择第N行?
我试过了
SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2
Run Code Online (Sandbox Code Playgroud)
但那没用.请帮忙!
dav*_*vek 24
基于经典答案:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:127412348064
select *
from ( select a.*, rownum rnum
from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
where rownum <= N_ROWS )
where rnum >= N_ROWS
/
Run Code Online (Sandbox Code Playgroud)
不适用于'='(将工作<2或> 2,但不相等)
所以你可以
SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2
Run Code Online (Sandbox Code Playgroud)
解决原因:
这RowNum
是Oracle提供的伪列.它是在处理SELECT子句时生成的.由于WHERE子句是在 SELECT子句之前处理的,因此RowNum
它还没有正确的值.
人们可以争论是否让甲骨文在情况下抛出异常是有意义的,但因为RowNum
仍然是一个伪列,它仍然有效.
注意:不要混淆这个RowId
,这是一个完全不同的故事!
重要编辑:
请注意,我写了一篇关于RowNum
只有真正的=
,>
,>=
,IN ()
或者其他人.如果您检查,例如RowNum < 10
,您只能获得9条记录!?我不知道为什么会这样!