PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Trovare il più grande gruppo di numeri consecutivi all'interno di una partizione

Puoi farlo con le funzioni della finestra.

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'osservazione chiave è che "corre in sequenza" ha questa proprietà:se enumeri le righe (per ogni giocatore) per data ed enumeri le righe per ogni giocatore e per data di esecuzione, la differenza è costante quando le corse sono tutti uguali e in ordine. Ciò forma un gruppo che puoi utilizzare per l'aggregazione per identificare il giocatore che desideri.

Qui è SQL Fiddle.