PHP-Code:
with data (Key1, Key2, Key3, von, bis) as (values
(1, 1, 1, 10001, 10005),
(1, 1, 1, 10006, 10010),
(1, 1, 2, 10011, 10015),
(1, 1, 1, 10016, 10020),
(1, 1, 1, 10021, 10030),
(1, 1, 1, 10031, 10057)
),
sort (Key1, Key2, Key3, von, bis, rn) as (
select key1,
key2,
key3,
von,
bis,
row_number() over (order by key1,key2,key3)
from data
),
gruppen (crn, grp_Key1, grp_Key2, grp_Key3, grp_von, grp_bis, gruppe) as (
select rn,
key1,
key2,
key3,
von,
bis,
1
from sort
where rn = 1
union all
select rn,
key1,
key2,
key3,
case when (key1, key2, key3) <> (grp_key1, grp_key2, grp_key3) then von
when von > grp_bis + 1 then von
else grp_von
end,
bis,
case when (key1, key2, key3) <> (grp_key1, grp_key2, grp_key3) then gruppe + 1
when von > grp_bis + 1 then gruppe + 1
else gruppe
end
from gruppen
inner join sort on crn + 1 = rn
)
select grp_key1,
grp_key2,
grp_key3,
min(grp_von),
max(grp_bis)
from gruppen
group by grp_key1,grp_key2,grp_key3,gruppe
order by min(grp_von)
1 1 1 10001 10010
1 1 2 10011 10015
1 1 1 10016 10057
Bookmarks