Förutsatt att du har värden för varje dag kan du få det totala antalet med hjälp av en underfråga och 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;
Tyvärr tror jag att du vill ha distinkta användare snarare än bara antal användare. Det gör problemet mycket svårare, särskilt eftersom Postgres inte stöder count(distinct)
som en fönsterfunktion.
Jag tror att du måste göra någon form av självanslutning för detta. Här är en metod:
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;