Запрос действителен независимо от того, является ли столбец id целым числом, а значение столбца id непрерывным.
;with c0 as(
select id, color,
ROW_NUMBER() over(order by id)*
(case when color <> LAG(color, 1, '') over(order by id) then 1 else 0 end) as color_id
from #temp
), c1 as(
select id, color, color_id, SUM(color_id) over(order by id) as color_gid
from c0
)
select color, MIN(id) as idMin, MAX(id) as idMax
from c1
group by color, color_gid
Его можно расширить для сортировки по столбцу a, группировки по последовательным значениям столбец b и найдите совокупные значения для столбца c, например:
;with c0 as(
select C, B,
ROW_NUMBER() over(order by A)*
(case when B <> LAG(B, 1, '') over(order by A) then 1 else 0 end) as B_id
from TableName
), c1 as(
select C, B, B_id, SUM(B_id) over(order by A) as B_gid
from c0
)
select B, MIN(C) as CMin, MAX(C) as CMax
from c1
group by B, B_gid