Giả sử bạn có các giá trị cho mỗi ngày, bạn có thể nhận được tổng số bằng cách sử dụng truy vấn con và 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;
Thật không may, tôi nghĩ bạn muốn người dùng khác biệt hơn là chỉ số lượng người dùng. Điều đó làm cho vấn đề trở nên khó khăn hơn nhiều, đặc biệt là vì Postgres không hỗ trợ count(distinct)
như một chức năng cửa sổ.
Tôi nghĩ rằng bạn phải làm một số loại tự tham gia cho điều này. Đây là một phương pháp:
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;