行番号の違いを使用して、グループを定義できます。
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);
これが機能する理由を説明するのは少し難しいです。サブクエリの結果を見ると、2つのrow_number()
の違いがなぜであるかが明らかになります。 値は順次グループを識別します。