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

Interroger DAU/MAU au fil du temps (quotidiennement)

En supposant que vous ayez des valeurs pour chaque jour, vous pouvez obtenir le nombre total à l'aide d'une sous-requête et d'une range between :

with dau as (
      select date, count(userid) as dau
      from dailysessions ds
      group by date
     )
select date, dau,
       sum(dau) over (order by date rows between -29 preceding and current row) as mau
from dau;

Malheureusement, je pense que vous voulez des utilisateurs distincts plutôt qu'un simple nombre d'utilisateurs. Cela rend le problème beaucoup plus difficile, en particulier parce que Postgres ne prend pas en charge count(distinct) en tant que fonction de fenêtre.

Je pense que vous devez faire une sorte d'auto-jointure pour cela. Voici une méthode :

with dau as (
      select date, count(distinct userid) as dau
      from dailysessions ds
      group by date
     )
select date, dau,
       (select count(distinct user_id)
        from dailysessions ds
        where ds.date between date - 29 * interval '1 day' and date
       ) as mau
from dau;