17,086
社区成员
发帖
与我相关
我的任务
分享
--1.创建测试表:
create table tmp as
select 1 id, 1 seq from dual union all
select 1 id, 2 seq from dual union all
select 1 id, 3 seq from dual union all
select 1 id, 5 seq from dual union all
select 1 id, 6 seq from dual union all
select 1 id, 10 seq from dual union all
select 2 id, 5 seq from dual union all
select 2 id, 6 seq from dual union all
select 2 id, 9 seq from dual union all
select 2 id, 10 seq from dual union all
select 2 id, 12 seq from dual union all
select 2 id, 13 seq from dual;
--2.sql实现:
select t1.id,t1.seq
from(select distinct id,seq+b.num-1 seq from tmp a,
(select rownum num from tmp connect by rownum <= (select max(seq) from tmp))b)t1
left join (select id, min(seq) min_seq, max(seq) max_seq from tmp group by id )t2 on t2.id = t1.id
where t1.seq between t2.min_seq+1 and t2.max_seq-1
and not exists(select null from tmp t3 where t3.id = t1.id and t3.seq = t1.seq)
order by t1.id,t1.seq