sql >> Databasteknik >  >> RDS >> PostgreSQL

Hitta den största gruppen av på varandra följande nummer inom en partition

Du kan göra detta med fönsterfunktioner.

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 viktigaste observationen är att "körningar i en sekvens" har denna egenskap:om du räknar upp raderna (för varje spelare) efter datum och du räknar upp raderna för varje spelare och efter datum, då är skillnaden konstant när körningarna är alla lika och i ordning. Det bildar en grupp som du kan använda för aggregering för att identifiera den spelare du vill ha.

Här är SQL Fiddle.



  1. Hur man kontrollerar om mysqli_query raderade några rader

  2. MySQL:Hur väljer man UTC-offset och sommartid för alla tidszoner?

  3. Lagrar jdbc dataset alla rader i jvm-minnet

  4. Lista ord indexerade av Innodb fulltext