在Oracle中从表中选择第N行

时间:2010-12-22 12:30:55

标签: sql oracle

如何从Oracle中的表中选择第N行?

我试过

SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2

但这不起作用。请帮忙!

11 个答案:

答案 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

谢谢!