トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
8-41 window指定の分析関数
SQLパズル
MyTable
ID Seq
-- ---
1 1 ←出力対象
1 2 ←出力対象
2 1
2 3 ←出力対象
3 4 ←出力対象
4 1 ←出力対象
4 2 ←出力対象
4 4
6 1 ←出力対象
6 2 ←出力対象
7 2
7 3 ←出力対象
IDが1小さくて、Seqが等しい行が存在しない行を出力する。
出力結果
ID Seq
-- ---
1 1
1 2
2 3
3 4
4 1
4 2
6 1
6 2
7 3
データ作成スクリプト
create table MyTable(ID,Seq) as
select 1,1 from dual union all
select 1,2 from dual union all
select 2,1 from dual union all
select 2,3 from dual union all
select 3,4 from dual union all
select 4,1 from dual union all
select 4,2 from dual union all
select 4,4 from dual union all
select 6,1 from dual union all
select 6,2 from dual union all
select 7,2 from dual union all
select 7,3 from dual;
SQL
--■■■分析関数を使う方法1■■■
select ID,Seq
from (select ID,Seq,
count(*) over(partition by Seq
order by ID range 1 preceding) as cnt
from MyTable) a
where cnt = 1
order by ID,Seq;
--■■■分析関数を使わない方法■■■
select ID,Seq
from MyTable a
where not exists(select 1 from MyTable b
where b.ID = a.ID-1
and b.Seq = a.Seq)
order by ID,Seq;
解説