Un approccio è la differenza dei numeri di riga:
select name, count(*)
from (select t.*,
(row_number() over (order by id) -
row_number() over (partition by name order by id)
) as grp
from t
) t
group by grp, name;
La logica è più facile da capire se si esegue la sottoquery e si osservano i valori di ciascun numero di riga separatamente e quindi si osserva la differenza.