Если вам нужно учесть несколько стартов и остановок, вы можете подсчитать острова, используя запрос, подобный следующему:
DECLARE @T TABLE(WeekId INT, PassedCondition BIT)
INSERT @T VALUES (1,1),(2,0),(3,0),(4,1),(5,1),(6,1),(7,1),(8,0),(9,0),(10,1)
;WITH Holes AS(SELECT WeekID FROM @T WHERE PassedCondition=0),
SegmentStart AS
(
SELECT WeekId, HoleWeekId
FROM
(
SELECT This.WeekId, HoleWeekId = MIN(H.WeekId)
FROM @T This
INNER JOIN Holes H ON H.WeekId > This.WeekID AND PassedCondition=1
GROUP BY This.WeekId
UNION
SELECT WeekId = MAX(WeekID), HoleWeekId=MAX(WeekID)+1
FROM @T
WHERE PassedCondition=1
)AS X
)
SELECT
WeekSegmentEnd = HoleWeekId-1,
ConsecutiveCount = COUNT(*)
FROM
SegmentStart
GROUP BY
HoleWeekId