Dengan asumsi Anda memiliki nilai untuk setiap hari, Anda bisa mendapatkan jumlah total menggunakan subquery dan 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;
Sayangnya, saya pikir Anda menginginkan pengguna yang berbeda daripada hanya jumlah pengguna. Itu membuat masalahnya jauh lebih sulit, terutama karena Postgres tidak mendukung count(distinct)
sebagai fungsi jendela.
Saya pikir Anda harus melakukan semacam self join untuk ini. Ini salah satu caranya:
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;