sql >> Base de Datos >  >> RDS >> PostgreSQL

Encontrar el grupo más grande de números consecutivos dentro de una partición

Puede hacer esto con las funciones de ventana.

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;

La observación clave es que las "ejecuciones en una secuencia" tienen esta propiedad:si enumera las filas (para cada jugador) por fecha y enumera las filas para cada jugador y las carreras por fecha, entonces la diferencia es constante cuando las carreras son todos iguales y en orden. Eso forma un grupo que puede usar para la agregación para identificar al jugador que desea.

Aquí es el violín SQL.