मान लें कि आपके पास प्रत्येक दिन के लिए मान हैं, तो आप एक सबक्वेरी और 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;
दुर्भाग्य से, मुझे लगता है कि आप केवल उपयोगकर्ता गणना के बजाय अलग-अलग उपयोगकर्ता चाहते हैं। यह समस्या को और अधिक कठिन बना देता है, खासकर क्योंकि पोस्टग्रेज 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;