参考这个问题,没有为Oracle平台提供解决方案/答案。 Selecting Nth Record in an SQL Query
没有排序或组或where子句。根据插入的记录订购。
原因是,我的应用程序日志表明记录号为7,34,46的错误。有没有正确的方法来存档?
提前谢谢。答案 0 :(得分:8)
据我所知,该链接的接受答案(几乎)对Oracle完全有效:
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS "RowNumber"
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE "RowNumber" = 5;
Oracle具有遵循此语法的分析函数ROW_NUMBER()。我将单引号更改为列别名的双引号,但我认为其他一切都很好。
更新:
至于根据插入时间检索第N条记录,您不能依赖Oracle来维护您的插入顺序。如果您未指定排序顺序,则无法保证结果将返回的顺序。如果您的主键始终由序列填充,则可以使用该顺序排序。或者,您可以在插入时填充时间戳列,并使用该列进行排序。简而言之,如果不指定排序顺序,则无法进行有意义的第N条记录查询。