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

Find den største gruppe af fortløbende tal inden for en partition

Du kan gøre dette med vinduesfunktioner.

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;

Den vigtigste observation er, at "kørsler i en sekvens" har denne egenskab:Hvis du opregner rækkerne (for hver spiller) efter dato, og du opregner rækkerne for hver spiller og efter kørslerne efter dato, så er forskellen konstant, når kørslerne er alle ens og i orden. Det danner en gruppe, som du kan bruge til aggregering for at identificere den spiller, du ønsker.

Her er SQL Fiddle.



  1. Hvordan indsætter jeg en tom række, men har autonummeropdateringen korrekt?

  2. Tilslutning til en MySQL-database i .NET

  3. Sådan får du den anden MAKSIMUM DATO i MYSQL

  4. Undgå at gentage poster, der vises i MySQL / PHP