Вот возможное решение, которое учитывает количество выигрышных полос для каждого идентификатора пользователя.
select head.userid, head.id, sum(profit), count(*)
from #bingo b
inner join (
select cur.userid, cur.id
from #bingo cur
left join #bingo prev
on cur.userid = prev.userid
and prev.id < cur.id
and not exists(
select *
from #bingo inbetween
where prev.userid = inbetween.userid
and prev.id < inbetween.id
and inbetween.id < cur.id)
where cur.winner = 1
and IsNull(prev.winner,0) = 0
) head
on head.userid = b.userid
and head.id <= b.id
left join (
select cur.userid, cur.id
from #bingo cur
left join #bingo prev
on cur.userid = prev.userid
and prev.id < cur.id
and not exists(
select *
from #bingo inbetween
where prev.userid = inbetween.userid
and prev.id < inbetween.id
and inbetween.id < cur.id)
where cur.winner = 1
and IsNull(prev.winner,0) = 0
) nexthead
on nexthead.userid = b.userid
and head.id < nexthead.id
and nexthead.id <= b.id
where nexthead.id is null
and b.winner = 1
group by head.userid, head.id
Два подзапроса "head" идентичны, вы можете поместить их в представление или в WITH, где они поддерживаются. Подзапрос «Начальники» ищет каждую главу победной серии; то есть первая победа или победа, которой предшествует проигрыш. Я предполагаю, что ваш идентификатор увеличивается с течением времени, поэтому я не использую столбец Created.
Запрос ниже, который ищет соответствующий заголовок для каждой строки. Идентификатор головы должен быть меньше или равен идентификатору текущей строки, и между ними не должно быть другой головы.
После этого просто группировать по голове, суммировать прибыль и считать строки.