PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Znalezienie największej grupy kolejnych liczb w obrębie partycji

Możesz to zrobić za pomocą funkcji 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;

Kluczową obserwacją jest to, że „działania w sekwencji” mają tę właściwość:jeśli wyliczysz wiersze (dla każdego gracza) według daty i wyliczysz wiersze dla każdego gracza i według uruchomień według daty, to różnica jest stała, gdy przebiegi są takie same i w porządku. Tworzy to grupę, której możesz użyć do agregacji w celu zidentyfikowania odpowiedniego gracza.

Tutaj jest SQL Fiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wywołaj funkcję z typem złożonym jako argumentem z natywnego zapytania w jpa

  2. impas w postgresie przy prostym zapytaniu o aktualizację

  3. Zmiana bazy danych rozwoju Django z domyślnego SQLite na PostgreSQL

  4. Maksymalna liczba znaków w etykietach (nazwy tabel, kolumny itp.)

  5. Unikalne pole modelu w Django i rozróżnianie wielkości liter (postgres)