[解決済み] OracleのORDER BYとROWNUMを正しく使うには?
2022-06-26 15:01:38
質問
SQL Server から Oracle にストアド プロシージャを変換して、当社の製品を互換性のあるものにするのに苦労しています。
私は、タイムスタンプに基づいて、いくつかのテーブルの最新のレコードを返すクエリを持っています。
SQL Serverです。
SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC
=> これで最新のレコードが返されます。
しかし オラクルです。
SELECT *
FROM raceway_input_labo
WHERE rownum <= 1
ORDER BY t_stamp DESC
=> これは、(おそらくインデックスに依存する)最も古いレコードを返します。
ORDER BY
ステートメントに関係なく、最も古いレコードを返します。
私の要件に合うように、Oracleクエリをこのようにカプセル化しました。
SELECT *
FROM
(SELECT *
FROM raceway_input_labo
ORDER BY t_stamp DESC)
WHERE rownum <= 1
で、動作します。しかし、特に関係するテーブルに多くのレコードがある場合、私には恐ろしいハックのように聞こえます。
これを達成するための最良の方法は何でしょうか?
どのように解決するのですか?
この
where
ステートメントが実行されます。
前に
の前に実行されます。
order by
. ということで、目的のクエリは " と言っています。
最初の行を取得し、次に
t_stamp
降順
"です。 そして、それはあなたが意図しているものではありません。
サブクエリメソッドは、Oracleでこれを行うための適切な方法です。
両方のサーバーで動作するバージョンが必要な場合、使用できます。
select ril.*
from (select ril.*, row_number() over (order by t_stamp desc) as seqnum
from raceway_input_labo ril
) ril
where seqnum = 1
外側の
*
は最後のカラムで "1"を返すでしょう。 これを避けるには、列を個別にリストアップする必要があります。
関連
-
MySQL】1136 - 列数が1行目の値数と一致しない問題を解決
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ERROR 1136 (21S01) を解決してください。列の数が Mysql の行 1 の値の数と一致しません。
-
windows mysql prompt access denied for user ''@'localhost' to database.
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] PostgreSQLで一重引用符で囲まれたテキストを挿入する
-
[解決済み] 既存のカラムにIDを追加する
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み] VARCHARとCHARの違いは何ですか?
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?