PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Finden der größten Gruppe fortlaufender Nummern innerhalb einer Partition

Sie können dies mit Fensterfunktionen tun.

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;

Die wichtigste Beobachtung ist, dass "Läufe in einer Sequenz" diese Eigenschaft haben:Wenn Sie die Zeilen (für jeden Spieler) nach Datum aufzählen und Sie die Zeilen für jeden Spieler und die Läufe nach Datum aufzählen, dann ist die Differenz bei den Läufen konstant sind alle gleich und in ordnung. Das bildet eine Gruppe, die Sie zur Aggregation verwenden können, um den gewünschten Spieler zu identifizieren.

Hier ist die SQL-Geige.