PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres:Definindo a sequência mais longa (em dias) por desenvolvedor


Existe um truque para fazer isso. Se você subtrair uma sequência crescente de números das datas, eles serão constantes para datas sequenciais. Podemos usar isso para definir grupos para cada desenvolvedor.
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 você sabe que há no máximo um registro por data, então você pode usar row_number() em vez de dense_rank() e count(*) em vez de count(distinct MRDate) .