PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Намиране на най-голямата група от последователни числа в рамките на дял

Можете да направите това с функциите на прозореца.

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;

Ключовото наблюдение е, че "изпълненията в последователност" имат това свойство:ако изброите редовете (за всеки играч) по дата и изброите редовете за всеки играч и по изпълненията по дата, тогава разликата е постоянна, когато изпълненията всички са еднакви и подредени. Това формира група, която можете да използвате за събиране, за да идентифицирате играча, който искате.

Тук е 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. Валидиране на SQL заявка с PHP

  2. Изберете всички колони с изключение на някои PostgreSQL

  3. Получавам pg грешка, когато се опитвам да унищожа контролер

  4. Частичен индекс не се използва в клаузата ON CONFLICT при извършване на upsert в Postgresql

  5. Как да активирам php да работи с postgresql?