sql >> Database >  >> RDS >> PostgreSQL

De grootste groep opeenvolgende nummers binnen een partitie vinden

U kunt dit doen met vensterfuncties.

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;

De belangrijkste observatie is dat "runs in een reeks" deze eigenschap hebben:als je de rijen (voor elke speler) opsomt op datum en je de rijen opsomt voor elke speler en op de runs op datum, dan is het verschil constant wanneer de runs zijn allemaal hetzelfde en in orde. Dat vormt een groep die u kunt gebruiken voor aggregatie om de gewenste speler te identificeren.

Hier is de SQL Fiddle.



  1. PostGIS Geometry invoegen en selecteren met Gorm

  2. ExecuteReader vereist een open en beschikbare verbinding. De huidige status van de verbinding is Bezig met verbinden

  3. XAMPP - Fout:MySQL wordt onverwacht afgesloten

  4. Hoe GROUP BY te gebruiken om strings in SQL Server samen te voegen?