Это обновленная версия, которая работает для заданного набора данных, а также обрабатывает случаи, когда у вас есть последовательности id1, id2 больше 2 во всех случаях, для которых я проверял. Это намного проще, чем мой первоначальный ответ. Замените tstGrouping на имя вашей таблицы.
;with p as
(
select
ROW_NUMBER () over (order by id1, start_time_utc) as row_num,
ROW_NUMBER () over (order by id1,id2, start_time_utc) as row_num2,
*
from
tstgrouping x1
)
select
id1,
min(start_time_utc) as start_time_utc,
max(end_time_utc) as end_time_utc,
id2
from p
group by
row_num - row_num2,id1,id2
order by
id1, start_time_utc