SQLでorder byとgroup byを併用する時の書き方

珍しくSQL書いてたら詰まったのでメモしておきます。

やりたいこと

どばーっとデータが貯まっているテーブルがあったとして。例えば色んなユーザのアクセスログが貯まっているテーブルを想定します。その中から各ユーザの最新アクセス情報を取りたい時にどうするか。

「dateでorder byしてから、group byすればいいんじゃないの?」と思ってたんすけど、どうやらこの2つは併用すると先にgroup byされてその結果がorder byされるそうな。そういう仕様らしい…。以下の記事が参考になりました。

order byとgroup byを併用する時のサブクエリ

じゃあ、サブクエリでdateでorder byした結果に対してgroup byしたらええやんと言う話になりまして、具体的にはこんな感じになりました。内容は変数名を見て察して頂ければと。

select * from (select * from log_table order by updated_date desc) A group by user_id

今までろくにサブクエリも使ったことなかったんですけど、調べてるとSQLって色んなこと出来るんだなぁ、と改めて知った。大学で「データベース」だけ切り出して一つの授業になるレベルくらいには、データベースの世界はやはり広いのですね。今まで馬鹿にしてすみませんでした。ぺこり。