PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Trouver le plus grand groupe de nombres consécutifs dans une partition

Vous pouvez le faire avec les fonctions de fenêtre.

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;

L'observation clé est que "les courses dans une séquence" ont cette propriété :si vous énumérez les lignes (pour chaque joueur) par date et que vous énumérez les lignes pour chaque joueur et par les courses par date, alors la différence est constante lorsque les courses sont tous les mêmes et dans l'ordre. Cela forme un groupe que vous pouvez utiliser pour l'agrégation afin d'identifier le joueur que vous voulez.

Ici est le violon SQL.