トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-6 分析関数の引数に演算結果

SQLパズル

IDテーブル
ID     Value
----   -----
1001    aaaa
1002    bbbb
1003    cccc
2001    dddd
2002    eeee

IDテーブルの、
IDの先頭2桁別に、IDの末尾2桁が最大のレコードを出力する。

出力結果
ID     Value
----   -----
1003    cccc
2002    eeee


データ作成スクリプト

create table IDテーブル(
ID    char(4),
Value char(4));

insert into IDテーブル values('1001','aaaa');
insert into IDテーブル values('1002','bbbb');
insert into IDテーブル values('1003','cccc');
insert into IDテーブル values('2001','dddd');
insert into IDテーブル values('2002','eeee');
commit;


SQL

--■■■分析関数を使う方法■■■
select ID,Value
from (select ID,Value,
      max(substr(ID,3)) over(partition by substr(ID,1,2)) as MaxID
      from IDテーブル)
where substr(ID,3)=MaxID;

--■■■相関サブクエリを使う方法■■■
select ID,Value from IDテーブル a
where substr(ID,3)=(select max(substr(b.ID,3)) from IDテーブル b
                     where substr(b.ID,1,2) = substr(a.ID,1,2));


解説

分析関数の引数に、演算結果を使うことができます。