Forudsat at du har værdier for hver dag, kan du få det samlede antal ved hjælp af en underforespørgsel og 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;
Desværre tror jeg, at du vil have distinkte brugere frem for blot brugertællinger. Det gør problemet meget vanskeligere, især fordi Postgres ikke understøtter count(distinct)
som en vinduesfunktion.
Jeg tror, du er nødt til at gøre en slags selvtilslutning for dette. Her er en metode:
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;