PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres :définir la séquence la plus longue (en jours) par développeur

Il y a une astuce pour faire ça. Si vous soustrayez une séquence croissante de nombres aux dates, elles seront constantes pour les dates séquentielles. Nous pouvons ensuite l'utiliser pour définir des groupes pour chaque développeur.

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;

Si vous savez qu'il y a au plus un enregistrement par date, vous pouvez utiliser row_number() au lieu de dense_rank() et count(*) au lieu de count(distinct MRDate) .