Страницы

Поиск по вопросам

понедельник, 10 декабря 2018 г.

Каков синтаксис для функционального аналога SELECT TOP(N) в Oracle?

Предположим, есть таблица TABLE
ID | DEF 1 | Один 2 | Два 3 | Три 4 | Четыре
Тогда запрос в MS SQL Server
SELECT TOP(2) * FROM TABLE ORDER BY ID DESC
Даст нам выдачу:
ID | DEF 4 | Четыре 3 | Три
А аналогичный запрос в Oracle (аналог, который мне предложился в интернетах)
SELECT * FROM TABLE WHERE ROWNUM <= 2 ORDER BY ID DESC
Даст нам выдачу:
ID | DEF 2 | Два 1 | Один
Как получить действительно аналогичный по функциональности синтаксис для Oracle?


Ответ

В оракле до 11-й версии включительно - через подзапрос с row_number
select * from (select t.*, row_number() over (order by id desc) rn from t) where rn <= 2
В 12-й версии появился синтаксис для первых N строк с LIMIT и OFFSET, почти как в постгресе (запрос скопипастил из интернета, 12-го оракла под рукой нет):
select * from t order by id desc OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

Комментариев нет:

Отправить комментарий