Você pode fazer isso usando um truque inteligente. O truque é contar o número de descrições até um id específico que são diferentes da descrição nesse
id
. Para valores em uma sequência, esse número será o mesmo. No MySQL você pode fazer essa contagem usando uma subconsulta correlacionada. O resto é só agrupar por este campo para juntar os valores:
select min(id) as id, description, count(*) as numCondensed
from (select t.*,
(select count(*)
from table t2
where t2.id <= t.id and t2.description <> t.description
) as grp
from table t
) t
group by description, grp;