Сначала вы должны определить границы того, что вы хотите удалить:
SELECT
T1.id as StartId,
(SELECT MIN(T2.id) from @tb1 T2 WHERE T1.id < T2.id and T2.typ = 2) as EndId
from @tb1 T1
WHERE T1.typ = 1
Результат:
StartId EndId
1 3
5 6
9 13
15 NULL
Затем вы можете использовать этот запрос в CTE (выражение общей таблицы)) сделать фактическое удаление:
DECLARE @tb1 AS TABLE (id INT, typ int)
INSERT INTO @tb1 (id, typ)
VALUES (1,1),(2,3),(3,2),(4,3),(5,1),(6,2),(7,3),(8,3),(9,1),(10,3),(11,3),(12,3),(13,2),(14,3),(15,1)
;WITH ranges AS (
SELECT
T1.id as StartId,
(SELECT MIN(T2.id) from @tb1 T2 WHERE T1.id < T2.id and T2.typ = 2) as EndId
FROM @tb1 T1
WHERE T1.typ = 1
)
DELETE T3
FROM @tb1 T3
INNER JOIN ranges ON T3.id > ranges.StartId and T3.id < ranges.EndId
SELECT * FROM @tb1