sql >> Databáze >  >> RDS >> PostgreSQL

Hledání největší skupiny po sobě jdoucích čísel v rámci oddílu

Můžete to udělat pomocí funkcí okna.

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;

Klíčovým postřehem je, že „běhy v sekvenci“ mají tuto vlastnost:pokud vyjmenujete řádky (pro každého hráče) podle data a vyjmenujete řádky pro každého hráče a podle data běhů, pak je rozdíl konstantní, když běží jsou všechny stejné a v pořádku. To tvoří skupinu, kterou můžete použít pro agregaci k identifikaci požadovaného hráče.

Zde je SQL Fiddle.



  1. mysql nefunguje pro IS NOT NULL

  2. Jaký typ hash používá mysql?

  3. Deklarování dočasné proměnné v databázi Oracle

  4. Postup krok za krokem pro migraci dat z Excelu do databázové tabulky MySql