ホームページ > データベース > mysql チュートリアル > `ORDER BY` と `ROWNUM` を使用して Oracle テーブルから最上位行を効率的に取得するにはどうすればよいですか?

`ORDER BY` と `ROWNUM` を使用して Oracle テーブルから最上位行を効率的に取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-07 07:35:41
オリジナル
989 人が閲覧しました

How to Efficiently Retrieve the Top Row from an Oracle Table Using `ORDER BY` and `ROWNUM`?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート