Oracle ORDER BY と ROWNUM の効率的な使用
Oracle では、ROWNUM 疑似列は、以下に基づいて結果セットから特定の行を取得する方法を提供します。彼らの順序。ただし、ORDER BY とともに ROWNUM を使用すると、予期しない結果が生じる可能性があります。
テーブルから最新のレコードを取得するには、SQL Server で次の SQL クエリがよく使用されます。
SELECT TOP 1 * FROM RACEWAY_INPUT_LABO ORDER BY t_stamp DESC
ただしOracle では、次のクエリのように ROWNUM でこのアプローチを使用すると、
SELECT * FROM raceway_input_labo WHERE rownum <= 1 ORDER BY t_stamp DESC
は最も古いレコードではなく最も古いレコードを取得します。 最近の。これは、Oracle では ROWNUM が ORDER BY の前に評価されるためです。
Oracle の ROWNUM を使用して最新のレコードを効果的に取得するには、次のようにサブクエリを使用します。
SELECT * FROM (SELECT * FROM raceway_input_labo ORDER BY t_stamp DESC) WHERE rownum <= 1
このサブクエリのアプローチにより、ORDER BY が確実に実行されます。 BY が最初に適用され、目的の出力が得られます。
あるいは、より汎用性の高いソリューションSQL Server と Oracle の両方で動作するこの関数は、row_number() 関数を使用して実装できます:
select ril.* from (select ril.*, row_number() over (order by t_stamp desc) as seqnum from raceway_input_labo ril ) ril where seqnum = 1
以上が`ORDER BY` と `ROWNUM` を使用して Oracle テーブルから最上位行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。