Puedes hacer esto usando un truco inteligente. El truco consiste en contar el número de descripciones hasta un ID particular que son diferentes de la descripción en ese id
. Para valores en una secuencia, este número será el mismo.
En MySQL puedes hacer este conteo usando una subconsulta correlacionada. El resto es simplemente agrupar por este campo para juntar los 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;