稍显复杂了点:
SQL> with tmp as(
2select 1 c1, 1 c2 from dual union all
3select 2 c1, 1 from dual union all
4select 4 c1, 1 from dual union all
5select 5 c1, 0 from dual union all
6select 6 c1, 0 from dual union all
7select8, 1 from dual union all
8select9, 1 from dual union all
9select 10, 1 from dual union all
10select 11, 1 from dual union all
11select 12, 1 from dual union all
12select 13, 0 from dual union all
13select 14, 1 from dual union all
14select 15, 1 from dual union all
15select 16, 1 from dual union all
16select 17, 1 from dual union all
17select 18, 1 from dual union all
18select 19, 1 from dual)
--以下为语句:
19select wmsys.wm_concat(c1), c2
20from (select b.*,
21
row_number() over(partition by g order by c1) r1,
22
row_number() over(partition by g order by c1 desc) r2
23
from (select a.*, sum(t) over(order by c1) g
24
from (select t.*, decode(c2, lag(c2, 1, c2) over(order by c1), 0, 1) t
25
from tmp t) a) b) c
26 where r1 = 1
27or r2 = 1
28 group by g, c2
29/
WMSYS.WM_CONCAT(C1)
C2
-------------------------------------------------------------------------------- ----------
1,4
1
5,6
0
8,12
1
13
0
14,19
1
|