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

Postgres:Definerer den længste streak (i ​​dage) pr. udvikler

Der er et trick til at gøre dette. Hvis du trækker en stigende talrække fra datoerne, vil de være konstante for datoer, der er sekventielle. Vi kan derefter bruge dette til at definere grupper for hver udvikler.

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;

Hvis du ved, at der højst er én post pr. dato, kan du bruge row_number() i stedet for dense_rank() og count(*) i stedet for count(distinct MRDate) .




  1. MySQL - Sådan laver du en Oracle RANK() OVER(ORDER BY score DESC)

  2. Ret fejl "ORA-01790:udtryk skal have samme datatype som tilsvarende udtryk"

  3. chown:/var/lib/postgresql/data/postgresql.conf:Skrivebeskyttet filsystem

  4. Android til Wamp-serverforbindelse ved hjælp af Android Studio og PHP