1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
with data as (
select '070220/001' as num, 1 as grp from dual
union all
select '070220/002' as num, 1 as grp from dual
union all
select '070220/003' as num, 1 as grp from dual
union all
select '070220/004' as num, 2 as grp from dual
union all
select '070220/006' as num, 2 as grp from dual
union all
select '070220/007' as num, 3 as grp from dual
union all
select '070220/008' as num, 3 as grp from dual
union all
select '070220/009' as num, 1 as grp from dual
)
select * from (
select distinct grp, code || substr('000' || (min(ord) over (partition by subgrp)),-3) as nummin,
code || substr('000' || (max(ord) over(partition by subgrp)),-3) as nummax from (
select code, ord, ord - rn as subgrp, grp
from (
select substr(num,1,7) as code, to_number(substr(num,-3)) as ord, grp,
row_number() over(partition by grp order by num) as rn
from data
)
)
)
order by grp, nummin
;
GRP NUMMIN NUMMAX
---------- ---------- ----------
1 070220/001 070220/003
1 070220/009 070220/009
2 070220/004 070220/004
2 070220/006 070220/006
3 070220/007 070220/008 |
Partager