内部表の集約結果でJOINする

よくあるgroup byでの集約結果でjoinしたい。というやつ。

駆動表

駆動表id 駆動表name
1 AAA
2 BBB
3 CCC

内部表

内部表id 駆動表id 内部表name
1 1 AAAの古いデータ
2 1 AAAの古いデータ
3 1 AAAの最新データ
4 2 BBBの古いデータ
5 2 BBBの最新データ

とあった時、

駆動表id 駆動表name 内部表id 内部表name
1 AAA 3 AAAの最新データ
2 BBB 5 BBBの最新データ
3 CCC

こういったデータ欲しい時がよくある。

一度、集約した内部表と結合した後、もう一度、name取得の為、内部表と結合する方法がわかり易い。
作成SQLはこんな感じ。

select
   *
from
    駆動表
    join ( select 駆動表id, max(内部表id) as 内部表id from 内部表 group by 駆動表id  ) A
        on 駆動表.駆動表id = A.駆動表id
    join 内部表
        on A.内部表id = 内部表.内部表id
order by 駆動表.駆動表id