oracleでgroupbyを使わずにmaxを使う方法




はい、ぶっちゃけなんじゃこりゃと思って、これで動くのかと思ったので、調査した結果を残しておきます。

結論から書くと、group byをしなくてもmaxでかけました。

普通の書き方

select dat1, max(dat2) as max_dat2
 from table
group by dat1

動くけど良くない書き方


select dat1, max(dat2) over (partition by dat2) as max_dat2 
 from table

これで動いちゃった。確かに言いたいことはわかる。
ただまあ、group byを明示的にしないと、毎回partition byを書かなきゃいけない地獄が待っているからあんまり良く無い。

keep (dense_rank first order by xxx )
みたいなことをやりたい場合の併用で無理やりやってる例を見てて、読みづらいなあ、とは思いました。