Możesz to zrobić za pomocą funkcji okna.
select player_id, runs, count(*) as numruns
from (select p.*,
(row_number() over (partition by player_id order by match_date) -
row_number() over (partition by player_id, runs order by match_date)
) as grp
from players p
) pg
group by grp, player_id, runs
order by numruns desc
limit 1;
Kluczową obserwacją jest to, że „działania w sekwencji” mają tę właściwość:jeśli wyliczysz wiersze (dla każdego gracza) według daty i wyliczysz wiersze dla każdego gracza i według uruchomień według daty, to różnica jest stała, gdy przebiegi są takie same i w porządku. Tworzy to grupę, której możesz użyć do agregacji w celu zidentyfikowania odpowiedniego gracza.
Tutaj jest SQL Fiddle.