Можете да използвате разликата в номерата на редовете, за да дефинирате групите:
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);
Малко е трудно да се обясни защо това работи. Ако погледнете резултатите от подзаявката, става очевидно защо разликата между двете row_number()
стойностите идентифицират последователни групи.