Bạn có thể sử dụng sự khác biệt của số hàng để xác định các nhóm:
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);
Có một chút khó khăn để giải thích tại sao điều này lại hiệu quả. Nếu bạn nhìn vào kết quả của truy vấn con, bạn sẽ thấy rõ lý do tại sao sự khác biệt giữa hai row_number()
giá trị xác định các nhóm tuần tự.