PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Encontrando o maior grupo de números consecutivos dentro de uma partição


Você pode fazer isso com funções de janela.
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;

A observação chave é que "execuções em sequência" têm esta propriedade:se você enumerar as linhas (para cada jogador) por data e enumerar as linhas para cada jogador e por corridas por data, então a diferença é constante quando as corridas são todos iguais e em ordem. Isso forma um grupo que você pode usar para agregação para identificar o jogador desejado.

Aqui é o violino SQL.