Выберите N-ую строку из таблицы в Oracle - PullRequest
11 голосов
/ 22 декабря 2010

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

Я пытался

SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2

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

Ответы [ 11 ]

23 голосов
/ 22 декабря 2010

Основано на классическом ответе:

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
/
8 голосов
/ 22 декабря 2010

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

так что вы можете

 SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2
6 голосов
/ 22 декабря 2010

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

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

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

Примечание: не путайте это с RowId, что совсем другая история!

ВАЖНОЕ РЕДАКТИРОВАНИЕ:

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

3 голосов
/ 04 декабря 2012
Select * From
(
    Select Row_Number() OVER (Order by empno) rno, e.* 
    From scott.emp e
)
Where rno in (1, 3, 11)
2 голосов
/ 22 декабря 2010
SELECT PRICE 
FROM (  
  SELECT PRICE,    
  ROWNUM rnum 
  FROM AAA_PRICING
  ORDER BY PRICE ASC
  ) 
WHERE    rnum = 2
0 голосов
/ 21 ноября 2018

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

SELECT PRICE FROM AAA_PRICING 
offset 1 rows fetch next 1 rows only
0 голосов
/ 08 марта 2018

выберите * От (выберите PRICE, DENSE_RANK () более (ORDER BY PRICE desc) как RNO От AAA_PRICING

) t, где RNO = 2;

0 голосов
/ 12 октября 2017

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

SELECT * FROM (
           SELECT ROWNUM RN, E.*
           FROM Emp E
          )
WHERE RN = 10;
0 голосов
/ 08 октября 2015
select * from (Select Price, rownum as rn from(Select * from AAA_PRICING a order by a.Price))
where rn=2;

Это даст вам 2-ую самую низкую цену из столбца Цена. Если вы хотите просто 2-й ряд, удалите Order By condition.

0 голосов
/ 19 августа 2013
SELECT * FROM
(SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING )
WHERE RN = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...