トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
5-1 グループごとに最大値の行を取得
SQLパズル
Table540テーブル
COL1 COL2 COL3 COL4
---- ---- ---- ----
1 1 1 3
2 1 2 6
3 1 3 9
3 2 4 3
3 2 5 6
3 2 6 9
4 3 7 3
Table540テーブルの、Col2のグループごとの最大のCol1を持つ行を出力する
出力結果
COL1 COL2 COL3 COL4
---- ---- ---- ----
3 1 3 9
3 2 4 3
3 2 5 6
3 2 6 9
4 3 7 3
データ作成スクリプト
create Table Table540(
Col1 int,
Col2 int,
Col3 int,
Col4 int);
insert into Table540 values
(1,1,1,3),(2,1,2,6),(3,1,3,9),
(3,2,4,3),(3,2,5,6),(3,2,6,9),
(4,3,7,3);
SQL
#■■■in述語を使う方法■■■
select Col1,Col2,Col3,Col4 from Table540 a
where (Col1,Col2) in (select max(b.Col1),b.Col2 from Table540 b group by b.Col2)
order by Col2,Col1,Col3;
#■■■existsを使う方法■■■
select Col1,Col2,Col3,Col4 from Table540 a
where not exists(select 1 from Table540 b
where b.Col2 = a.Col2
and b.Col1 > a.Col1)
order by Col2,Col1,Col3;
#■■■サブクエリを使わない方法■■■
select a.COL1,a.COL2,a.COL3,a.COL4
from Table540 a
Left Join Table540 b
on (a.COL2 = b.COL2
and b.COL1 > a.COL1)
where b.COL1 is null;
解説
Col2のグループごとのCol1の最大値と等しいことを条件としてます