以下のクエリを実行した時
sql1
1 2SELECT id, date 3, RANK() OVER(PARTITION BY id ORDER BY date) as ranking 4FROM temp 5
このクエリから更にranking = 2のものだけを取り出したい時
sql2
1SELECT id, date 2, RANK() OVER(PARTITION BY id ORDER BY date) as ranking 3FROM temp 4WHERE ranking = 2
上記のようにサブクエリを使わずに実行できる方法はございますでしょうか。
(実際にはsql2のクエリはエラーを起こすはずです)
ご回答いただけると幸いです。よろしくお願い致します。
View, WITH句, ストアドなどもだめですか?
ご質問ありがとうございます。
サブクエリを使わないで出したいのでWITH句などは使わないことを想定しています。
SQLの構文上SELECT句は最初に書きますが、評価は最後に行います。
一般的にRANK関数はSELECT句でしか使えないので無理です。
ご回答ありがとうございます。
サブクエリ使わないと無理なこと、承知しました。
追加の質問で恐縮なのですが、ORDER BY やGROUP BY などでは作成したカラムを使えるのですがどういった構造になるのでしょうか。
ご存知であればご教授頂きたいです。
ごめんなさい
ORDER BY などの全体集約句がある場合はそっちが最後ですね。
なるほどです!ありがとうございます。
そうなるとSQLでは評価構造は
FROM
↓
WHERE
↓
SELECT
↓
全体集約句
みたいなイメージですかね?
非常に助かりました!ありがとうございます!!!
回答2件
あなたの回答
tips
プレビュー