Выберите N-я строка из таблицы в Oracle

Как я могу выбрать N-я строка из таблицы в Oracle?

Я пробовал

SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2

но это не сработало. Пожалуйста, помогите!

Ответ 2

Не будет работать с '=' (будет работать < 2 или > 2, но не равно)

чтобы вы могли

 SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2

Ответ 3

Чтобы устранить причину этого:

RowNum - псевдо-столбец, предоставляемый Oracle. Он генерируется во время обработки SELECT-предложения. Поскольку WHERE-предложение обрабатывается перед предложением SELECT, RowNum еще не имеет правильного значения.

Можно утверждать, имеет ли смысл, чтобы Oracle генерировал исключение в ситуации, но поскольку RowNum все еще является псевдостолбцом, он по-прежнему действителен, чтобы иметь его там.

Примечание. Не путайте это с RowId, что представляет собой совершенно другую историю!

ВАЖНАЯ ИНФОРМАЦИЯ:

Обратите внимание, что то, что я написал о RowNum, верно только для =, >, >=, IN () и, возможно, других. Если вы проверяете, например, RowNum < 10, вы получаете только девять записей!? Я не знаю, почему это так!

Ответ 4

Select * From
(
    Select Row_Number() OVER (Order by empno) rno, e.* 
    From scott.emp e
)
Where rno in (1, 3, 11)

Ответ 5

SELECT PRICE 
FROM (  
  SELECT PRICE,    
  ROWNUM rnum 
  FROM AAA_PRICING
  ORDER BY PRICE ASC
  ) 
WHERE    rnum = 2

Ответ 6

SELECT * FROM
(SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING )
WHERE RN = 2;

Ответ 7

select * from (Select Price, rownum as rn from(Select * from AAA_PRICING a order by a.Price))
where rn=2;

Это даст вам 2-ю самую низкую цену из столбца Price. Если вы хотите, чтобы просто 2-я строка удалила условие "По условию".

Ответ 8

ROWNUM - псевдо-столбец, который генерирует уникальные псевдо-значения (равные количеству записей, присутствующих в инструкции SELECT o/p) во время выполнения предложения SELECT. Когда этот псевдо-столбец указан с предложением WHERE, значение по умолчанию становится 1. Таким образом, он ведет себя согласно указанному с ним оператору сравнения.

SELECT * FROM (
           SELECT ROWNUM RN, E.*
           FROM Emp E
          )
WHERE RN = 10;

Ответ 9

select * 
From (select PRICE, DENSE_RANK() over(ORDER BY PRICE desc) as RNO
      From AAA_PRICING
     ) t where RNO=2;

Ответ 10

Если вы используете Oracle 12 или выше, вы можете использовать предложения о смещении результата и выборке:

SELECT PRICE FROM AAA_PRICING 
offset 1 rows fetch next 1 rows only

Ответ 11

Проблема решена!

Чтобы выбрать вторую строку в 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

Спасибо!