毎日の値があると仮定すると、サブクエリと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)
をサポートしていないため、問題がはるかに困難になります。 ウィンドウ関数として。
これには何らかの自己参加が必要だと思います。これが1つの方法です:
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;