1つのアプローチは、行番号の違いです:
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;
サブクエリを実行し、各行番号の値を個別に調べてから、違いを調べると、ロジックを理解するのが最も簡単になります。