Du kan använda skillnaden mellan radnummer för att definiera grupperna:
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);
Det är lite svårt att förklara varför detta fungerar. Om du tittar på resultaten av underfrågan blir det uppenbart varför skillnaden mellan de två row_number()
värden identifierar sekventiella grupper.