按记录编号的SQL查询

按记录编号的SQL查询,sql,oracle,Sql,Oracle,关于此问题,没有给出针对Oracle平台的解决方案/答案。 没有sort、group或where子句。根据插入的记录订购 出于这个原因,我的应用程序日志声明记录7、34、46是抛出错误。有没有正确的方法来存档 提前发送Thx。据我所知,该链接中的公认答案对Oracle几乎完全有效: WITH OrderedOrders AS ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (ORDER BY OrderDate) AS "

关于此问题,没有给出针对Oracle平台的解决方案/答案。

没有sort、group或where子句。根据插入的记录订购

出于这个原因,我的应用程序日志声明记录7、34、46是抛出错误。有没有正确的方法来存档


提前发送Thx。

据我所知,该链接中的公认答案对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条记录查询。

据我所知,该链接的公认答案对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条记录查询。

按插入的记录排序。您将按某个列进行排序。不维护插入顺序。不存在“按插入记录的顺序”之类的内容。行的物理位置可能会随时间变化。您只能通过将插入时间存储在时间戳中来确定插入行的顺序。按插入记录的顺序。您将按某个列进行排序。不维护插入顺序。不存在“按插入记录的顺序”之类的内容。行的物理位置可能会随时间变化。您只能通过将插入时间存储在时间戳中来确定行的插入顺序。我们可以不按顺序使用它吗?@DanA.:您的评论应该是您答案的一部分。由于OP需要按插入时间排序,我认为答案应该说明如何以及如果可能的话。@ZaimanNoris:不。如果不排序,您无法确定第n行。我们可以不排序使用它吗?@DanA:您的评论应该是您答案的一部分。由于OP希望按插入时间排序,我认为答案应该说明如何以及如果可能的话。@ZaimanNoris:不。如果不排序,您无法确定第n行。