2012-04-09 32 views
1

この質問を参照すると、Oracleプラットフォームでは解決策/回答はありませんでした。 Selecting Nth Record in an SQL Queryレコード番号別のSQLクエリ

いいえソートまたはグループまたはwhere句。挿入されたレコードごとに注文する。

この理由から、私のアプリケーションログには、レコード番号7,34,46がエラーをスローしていると記載されています。これをアーカイブする正しい方法はありますか?

Thxです。

+2

「挿入レコードごとに注文する」いくつかの列を並べ替えるつもりです。挿入順は維持されません。 – Thilo

+1

「*レコードは挿入レコードごとに*」というようなものはありません。行のphyiscalの位置は時間とともに変化する可能性があります。挿入時間をタイムスタンプに格納することによって、行の挿入順序を決定することしかできません。 –

答えて

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

注文なしでこれを使用できますか? –

+0

@ダナ:あなたのコメントはあなたの答えの一部でなければなりません。 OPは挿入時間によって注文を望んでいるので、私は答えがどのように(もし可能であれば)可能であるかを述べなければならないと思います。 –

+0

@ ZaimanNoris:いいえ。注文することなく「n番目」の行を決定することはできません**。 –