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;