通过记录号查询SQL查询

问题描述:

参考此问题,Oracle平台没有给出解决方案/答案。 Selecting Nth Record in an SQL Query通过记录号查询SQL查询

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

这样做的原因是,我的申请日志中指出记录号7,34,46是抛出错误。有没有任何正确的方法来归档?

Thx提前。

+2

”按照插入的记录订购。“你将按某个列排序。插入顺序不被维护。 – Thilo 2012-04-09 06:16:09

+1

没有“*根据插入的记录订购*”这样的东西。行的phyiscal位置可能随时间而改变。您只能通过将插入时间存储在时间戳中来确定插入行的顺序。 – 2012-04-09 08:16:49

至于我可以告诉大家,从该链接接受的答案是(几乎)完全合法的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()的语法如下。我将单引号更改为双列引号,但我认为其他所有内容都很好。

UPDATE:

据检索基于插入时间第N个记录,你不能依赖Oracle来维护您的插入顺序。如果您没有指定排序顺序,则不能保证结果将返回到什么顺序。如果您有一个总是由序列填充的主键,则可以使用该键排序。或者,您可以在插入时填充时间戳列,然后使用该列进行排序。长话短说,没有指定排序顺序,你不能有一个有意义的第N条记录查询。 “

+0

我们可以在不订购的情况下使用它吗? – 2012-04-09 07:00:47

+0

@丹娜:你的评论应该是你答案的一部分。由于OP希望通过插入时间进行排序,我认为答案应该说明如何(以及如果)这是可能的。 – 2012-04-09 07:52:38

+0

@ZaimanNoris:没有。你可以**不**在没有排序的情况下确定“第n”行。 – 2012-04-09 08:18:27