按记录号查询SQL

时间:2012-04-09 06:12:35

标签: sql oracle

参考这个问题,没有为Oracle平台提供解决方案/答案。 Selecting Nth Record in an SQL Query

没有排序或组或where子句。根据插入的记录订购。

原因是,我的应用程序日志表明记录号为7,34,46的错误。有没有正确的方法来存档?

提前谢谢。

1 个答案:

答案 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条记录查询。