sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres:definición de la racha más larga (en días) por desarrollador

Hay un truco para hacer esto. Si resta una secuencia creciente de números de las fechas, entonces serán constantes para las fechas que son secuenciales. Luego podemos usar esto para definir grupos para cada desarrollador.

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 sabe que hay como máximo un registro por fecha, entonces puede usar row_number() en lugar de dense_rank() y count(*) en lugar de count(distinct MRDate) .