Как я могу выбрать N-я строка из таблицы в Oracle?
Я пробовал
SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2
но это не сработало. Пожалуйста, помогите!
Как я могу выбрать N-я строка из таблицы в Oracle?
Я пробовал
SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2
но это не сработало. Пожалуйста, помогите!
Основываясь на классическом ответе:
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
/
Не будет работать с '=' (будет работать < 2 или > 2, но не равно)
чтобы вы могли
SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2
Чтобы устранить причину этого:
RowNum
- псевдо-столбец, предоставляемый Oracle. Он генерируется во время обработки SELECT-предложения. Поскольку WHERE-предложение обрабатывается перед предложением SELECT, RowNum
еще не имеет правильного значения.
Можно утверждать, имеет ли смысл, чтобы Oracle генерировал исключение в ситуации, но поскольку RowNum
все еще является псевдостолбцом, он по-прежнему действителен, чтобы иметь его там.
Примечание. Не путайте это с RowId
, что представляет собой совершенно другую историю!
ВАЖНАЯ ИНФОРМАЦИЯ:
Обратите внимание, что то, что я написал о RowNum
, верно только для =
, >
, >=
, IN ()
и, возможно, других. Если вы проверяете, например, RowNum < 10
, вы получаете только девять записей!? Я не знаю, почему это так!
Select * From
(
Select Row_Number() OVER (Order by empno) rno, e.*
From scott.emp e
)
Where rno in (1, 3, 11)
SELECT PRICE
FROM (
SELECT PRICE,
ROWNUM rnum
FROM AAA_PRICING
ORDER BY PRICE ASC
)
WHERE rnum = 2
SELECT * FROM
(SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING )
WHERE RN = 2;
select * from (Select Price, rownum as rn from(Select * from AAA_PRICING a order by a.Price))
where rn=2;
Это даст вам 2-ю самую низкую цену из столбца Price. Если вы хотите, чтобы просто 2-я строка удалила условие "По условию".
ROWNUM
- псевдо-столбец, который генерирует уникальные псевдо-значения (равные количеству записей, присутствующих в инструкции SELECT
o/p) во время выполнения предложения SELECT
. Когда этот псевдо-столбец указан с предложением WHERE
, значение по умолчанию становится 1
. Таким образом, он ведет себя согласно указанному с ним оператору сравнения.
SELECT * FROM (
SELECT ROWNUM RN, E.*
FROM Emp E
)
WHERE RN = 10;
select *
From (select PRICE, DENSE_RANK() over(ORDER BY PRICE desc) as RNO
From AAA_PRICING
) t where RNO=2;
Если вы используете Oracle 12 или выше, вы можете использовать предложения о смещении результата и выборке:
SELECT PRICE FROM AAA_PRICING
offset 1 rows fetch next 1 rows only
Проблема решена!
Чтобы выбрать вторую строку в 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
Спасибо!