데이터가 그냥 저렇게 나열되어 있지는 않을 것 같고
sort 기준 컬럼이 있을 것 같은데요.
with t as ( select 1 sort, 1 num from dual union all select 2 sort, 2 num from dual union all select 3 sort, 3 num from dual union all select 4 sort, 4 num from dual union all select 5 sort, 5 num from dual union all select 6 sort, 6 num from dual union all select 7 sort, 7 num from dual union all select 8 sort, 8 num from dual union all select 9 sort, 9 num from dual union all select 10 sort, 10 num from dual union all select 11 sort, 13 num from dual union all select 12 sort, 14 num from dual union all select 13 sort, 11 num from dual union all select 14 sort, 12 num from dual union all select 15 sort, 15 num from dual union all select 16 sort, 16 num from dual union all select 17 sort, 17 num from dual union all select 18 sort, 18 num from dual union all select 19 sort, 19 num from dual union all select 20 sort, 20 num from dual ) select to_char(min(num))||'-'||to_char(max(num)) gp, min(num) minnum, max(num) maxnum from ( select sort, num, sum(fg) over(order by sort) gp from ( select sort, num, decode(num - lag(num) over (order by sort),1,0,1) fg from t ) ) group by gp order by 1
WITH t AS( SELECT LEVEL lv FROM dual CONNECT BY level <=10 UNION ALL SELECT 13 FROM dual UNION ALL SELECT 14 FROM dual UNION ALL SELECT 11 FROM dual UNION ALL SELECT 12 FROM dual UNION ALL SELECT 15 FROM dual UNION ALL SELECT 16 FROM dual UNION ALL SELECT 17 FROM dual UNION ALL SELECT 18 FROM dual UNION ALL SELECT 19 FROM dual UNION ALL SELECT 20 FROM dual ) select MIN(lv) 최소값 ,MAX(lv) 최대값 ,MIN(lv)||'~'||MAX(lv) 그룹 FROM ( SELECT lv ,gb1 ,SUM(gb1) OVER(ORDER BY lv) gb2 FROM ( SELECT lv ,CASE WHEN (lv-LAG(lv) OVER(ORDER BY null) ) = 1 THEN 0 ELSE 1 END gb1 FROM t ) ) GROUP BY gb2 ORDER BY 1
--결과 데이터
1 10 1~10
11 12 11~12
13 14 13~14
15 20 15~20