Åh, jeg tror, jeg fandt ud af det. Du bekymrer dig om sekvenser af værdier, der er tilstødende. Den første kolonne er det maksimale id, den anden er værdien, og den tredje er længden.
Ja, du kan gøre dette med variabler:
select max(id), val, count(*)
from (select t.*,
(@grp := if(@v = val, @grp,
if(@v := val, @grp + 1, @grp + 1)
)
) as grp
from yourtable t cross join
(select @v := -1, @grp := -1) params
order by id
) t
group by grp, val
order by max(id);