Ако приемем, че имате стойности за всеки ден, можете да получите общия брой, като използвате подзаявка и 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;
За съжаление, мисля, че искате отделни потребители, а не само брой потребители. Това прави проблема много по-труден, особено защото Postgres не поддържа count(distinct)
като функция за прозорец.
Мисля, че трябва да направите някакъв вид самостоятелно присъединяване за това. Ето един метод:
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;