Предположим, есть таблица 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;
Комментариев нет:
Отправить комментарий