Это пример проблемы пробелов и островков. Однако для ее решения необходимо упорядочить данные - и таблицы SQL представляют собой неупорядоченные наборы.
Позвольте мне предположить, что у вас есть такой столбец. Тогда можно использовать разницу номеров строк:
select t.*,
dense_rank() over (partition by id order by grp, (seqnum - seqnum_g)) as grouping
from (select t.*,
row_number() over (partition by id order by ?) as seqnum,
row_number() over (partition by id, grp order by ?) as seqnum_g
from t
) t;
Это не приводит к значениям, которые вы специально запрашиваете, но идентифицирует каждую группу.