Это проблема пробелов и островков, когда вы хотите сгруппировать «смежные» строки.
Один подход основан на разнице между номерами строк для идентификации групп. Если id
постоянно увеличивается на 1
, рассмотрим:
select
name,
row_number() over(partition by name, id - rn order by min(date)) grp
from (
select
t.*,
row_number() over(partition by name order by date) rn
from mytable t
) t
group by name, id - rn
order by grp
В противном случае мы можем сгенерировать id
с помощью row_number()
:
select
name,
row_number() over(partition by name, rn1 - rn2 order by min(date)) grp
from (
select
t.*,
row_number() over(order by date) rn1,
row_number() over(partition by name order by date) rn2
from mytable t
) t
group by name, rn1 - rn2
order by grp