Во-первых, вы предполагаете, что в ваших строках есть порядок, но столбец порядка не указан. Таблицы SQL представляют неупорядоченные множества. Без такого столбца нет порядка.
Позвольте мне предположить, что у вас есть один.
Тогда этопроблема разрывов и островков. Вы хотите острова типа = 1, чтобы вы могли перечислить их. Вы можете идентифицировать их, выполнив совокупную сумму type = 2
- эта совокупная сумма определяет группировку смежных type = 1
записей. Остальное - просто row_number()
:
select t.*,
(case when type = 2 then 0
else row_number() over (partition by type, grp order by <ordering col>)
end) as expected_result
from (select t.*,
sum(case when type = 2 then 1 else 0 end) over (order by <ordering col>) as grp
from t
) t;
Здесь - это дБ <> скрипка.