2012-04-09 200 views
1

參考此問題,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

回答

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()的語法如下。我將單引號更改爲雙列引號,但我認爲其他所有內容都很好。

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