Vous pouvez utiliser la différence des numéros de lignes pour définir les groupes :
select Shade, count(*) as amount
from (select t.*,
row_number() over (order by level) as seqnum,
row_number() over (partition by shade order by level) as seqnum_s
from t
) t
group by Shade, (seqnum - seqnum_s);
Il est un peu difficile d'expliquer pourquoi cela fonctionne. Si vous regardez les résultats de la sous-requête, il devient évident pourquoi la différence entre les deux row_number()
les valeurs identifient des groupes séquentiels.