У меня есть запрос, который возвращает большой набор данных (10000+ строк). Я хочу заказать по дате по убыванию и отобразить первые 40 результатов. Есть ли способ запустить такой запрос, который извлекает только эти 40 результатов без предварительного извлечения всего 10000?Разбиение большого набора данных
У меня есть что-то вроде этого:
select rownum, date, * from table
order by date desc
Это выбирает все данные и распоряжения их по дате, но ROWNUM не в порядке, так что бесполезно для выбора только первый 40.
ROW_NUMBER() over (ORDER BY date desc) AS rowNumber
^Будет отображаться номер рулона в порядке, но я не могу использовать его в предложении where, потому что это функция окна. Я мог бы запустить это:
select * from (select ROW_NUMBER() over (ORDER BY date desc) AS rowNumber,
rownum, * from table
order by date desc) where rowNumber between pageStart and pageEnd
но это выбор всех 10000 строк. Как я могу сделать это эффективно?
какая база данных вы используете? – sstan
Я использую Oracle –
Является ли значение rowNumber между pageStart и pageEnd? – Luc