Angenommen, Sie haben Werte für jeden Tag, können Sie die Gesamtzahlen mit einer Unterabfrage und range between
abrufen :
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;
Leider denke ich, dass Sie unterschiedliche Benutzer und nicht nur Benutzerzahlen wollen. Das macht das Problem viel schwieriger, insbesondere weil Postgres count(distinct)
nicht unterstützt als Fensterfunktion.
Ich denke, Sie müssen dafür eine Art Selbstverknüpfung durchführen. Hier ist eine Methode:
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;