Za předpokladu, že máte hodnoty pro každý den, můžete získat celkové počty pomocí dílčího dotazu a 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;
Bohužel si myslím, že chcete spíše odlišné uživatele než jen počty uživatelů. Tím je problém mnohem obtížnější, zejména proto, že Postgres nepodporuje count(distinct)
jako funkce okna.
Myslím, že se k tomu musíte nějak připojit. Zde je jedna metoda:
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;