Du kan bruge forskellen på rækkenumre til at definere grupperne:
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 er lidt svært at forklare, hvorfor dette virker. Hvis du ser på resultaterne af underforespørgslen, bliver det tydeligt, hvorfor forskellen mellem de to row_number()
værdier identificerer sekventielle grupper.