sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres:Definierar den längsta streaken (i dagar) per utvecklare

Det finns ett knep att göra detta. Om du subtraherar en ökande sekvens av tal från datumen, kommer de att vara konstanta för datum som är sekventiella. Vi kan sedan använda detta för att definiera grupper för varje utvecklare.

select developer, max(numdays) as maxseq
from (select developer, grp, min(MRDate) as MR_start, max(MRDate) as MR_end,
             count(distinct MRDate) as numdays
      from (select t.*,
                  (MRDate - dense_rank() over (partition by developer order by date)) as grp
            from t
           ) t
      group by developer, grp
     ) t
group by developer;

Om du vet att det finns högst en post per datum kan du använda row_number() istället för dense_rank() och count(*) istället för count(distinct MRDate) .




  1. Postgres-frågan är mycket långsam med current_date::date istället för hårdkodat datum

  2. Alternativ till att använda Prepared Statement i Trigger med MySQL

  3. jdbc till MYSQL-fel:Ingen lämplig drivrutin hittades för jdbc:mysql://localhost:3306/test?user='root'&password=''

  4. Hur lagrar man användarens tidszon i mysql?