1

この質問を参照すると、Oracle プラットフォームに関する解決策/回答は提供されませんでした。 SQL クエリで N 番目のレコードを選択する

ソート、グループ、または where 句はありません。挿入されたレコードに従って注文します。

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

事前にThx。

4

1 に答える 1

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 番目のレコード クエリを作成できません。

于 2012-04-09T06:20:15.950 に答える