PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres:definizione della serie più lunga (in giorni) per sviluppatore

C'è un trucco per farlo. Se sottrai una sequenza crescente di numeri dalle date, saranno costanti per le date sequenziali. Possiamo quindi usarlo per definire i gruppi per ogni sviluppatore.

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;

Se sai che esiste al massimo un record per data, puoi utilizzare row_number() invece di dense_rank() e count(*) invece di count(distinct MRDate) .