珍しく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って色んなこと出来るんだなぁ、と改めて知った。大学で「データベース」だけ切り出して一つの授業になるレベルくらいには、データベースの世界はやはり広いのですね。今まで馬鹿にしてすみませんでした。ぺこり。