如何从Oracle中的表中选择第N行?
我试过
SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2
但这不起作用。请帮忙!
答案 0 :(得分:23)
基于经典答案:
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
/
答案 1 :(得分:8)
不适用于'='(将工作&lt; 2或&gt; 2,但不相等)
所以你可以
SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2
答案 2 :(得分:6)
解决原因:
RowNum
是Oracle提供的伪列。它是在处理SELECT子句时生成的。由于WHERE子句在 SELECT子句之前处理,因此RowNum
没有正确的值。
有人可以争论让Oracle在某种情况下抛出异常是否合理,但由于RowNum
仍然是伪列,因此将其保留在那里仍然有效。
注意:不要将此与RowId
混淆,这是一个完全不同的故事!
重要编辑:
请注意,我撰写的关于RowNum
的内容仅适用于=
,>
,>=
,IN ()
以及其他人。如果您检查,例如RowNum < 10
,你只能获得9条记录!?我不知道为什么会这样!
答案 3 :(得分:3)
Select * From
(
Select Row_Number() OVER (Order by empno) rno, e.*
From scott.emp e
)
Where rno in (1, 3, 11)
答案 4 :(得分:2)
SELECT PRICE
FROM (
SELECT PRICE,
ROWNUM rnum
FROM AAA_PRICING
ORDER BY PRICE ASC
)
WHERE rnum = 2
答案 5 :(得分:0)
SELECT * FROM
(SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING )
WHERE RN = 2;
答案 6 :(得分:0)
select * from (Select Price, rownum as rn from(Select * from AAA_PRICING a order by a.Price))
where rn=2;
它会从价格列中获得第二低的价格。如果您只想要第2行删除Order By条件。
答案 7 :(得分:0)
ROWNUM
是一个伪列,它在执行SELECT
子句期间生成唯一的伪值(等于SELECT
语句中存在的记录数o / p)。当使用WHERE
子句指定此伪列时,默认值为1
。所以它的行为符合用它指定的比较运算符。
SELECT * FROM (
SELECT ROWNUM RN, E.*
FROM Emp E
)
WHERE RN = 10;
答案 8 :(得分:0)
选择*来自( 选择PRICE,DENSE_RANK()over(ORDER BY PRICE desc)作为RNO来自AAA_PRICING
)t其中RNO = 2;
答案 9 :(得分:0)
如果您使用的是Oracle 12或更高版本,则可以使用结果offset和fetch子句:
SELECT PRICE FROM AAA_PRICING
offset 1 rows fetch next 1 rows only
答案 10 :(得分:-2)
问题解决了!
在Oracle中选择第二行..
select SEN_NO,ITEM_NO from (select * from master_machine where
sen_no ='BGCWKKL23' and rownum <=2 order by
rownum desc,timestamp asc) where rownum <=1
谢谢!