PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres:Definition des längsten Streaks (in Tagen) pro Entwickler

Dazu gibt es einen Trick. Wenn Sie von den Datumsangaben eine aufsteigende Zahlenfolge subtrahieren, bleiben diese bei aufeinanderfolgenden Datumsangaben konstant. Wir können dies dann verwenden, um Gruppen für jeden Entwickler zu definieren.

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;

Wenn Sie wissen, dass es höchstens einen Datensatz pro Datum gibt, können Sie row_number() verwenden statt dense_rank() und count(*) statt count(distinct MRDate) .