【发布时间】:2015-09-28 09:12:01
【问题描述】:
我有一个返回大型(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 行。我怎样才能有效地做到这一点?
【问题讨论】:
-
你使用的是哪个数据库?
-
rowNumber的值在pageStart和pageEnd之间吗?
标签: sql oracle pagination