Это тип проблемы с промежутками и островками. Одно решение использует разницу номеров строк. Итак, чтобы получить все полосы:
select player_win_id, count(*)
from (select t.*,
row_number() over (order by id) as seqnum,
row_number() over (partition by player_win_id order by id) as seqnum_p
from MatchResults t
) t
group by player_win_id, (seqnum - seqnum_p);
Почему это работает, довольно сложно объяснить. Но если вы посмотрите на результаты подзапроса, вы, вероятно, увидите, как разница между значениями номеров строк захватывает соседние строки с одним и тем же идентификатором выигрыша игрока.
По максимуму, самый простой, вероятно, просто запрос агрегирования:
select player_win_id, max(cnt)
from (select player_win_id, count(*) as cnt
from (select t.*,
row_number() over (order by id) as seqnum,
row_number() over (partition by player_win_id order by id) as seqnum_p
from MatchResults t
) t
group by player_win_id, (seqnum - seqnum_p)
) p
group by player_win_id;