この質問を参照すると、Oracle プラットフォームに関する解決策/回答は提供されませんでした。 SQL クエリで N 番目のレコードを選択する
ソート、グループ、または where 句はありません。挿入されたレコードに従って注文します。
この理由として、私のアプリケーション ログには、レコード番号 7、34、46 がエラーをスローしていると記載されていました。これをアーカイブする正しい方法はありますか?
事前にThx。
この質問を参照すると、Oracle プラットフォームに関する解決策/回答は提供されませんでした。 SQL クエリで N 番目のレコードを選択する
ソート、グループ、または 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 番目のレコード クエリを作成できません。