PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consultar DAU/MAU ao longo do tempo (diariamente)


Supondo que você tenha valores para cada dia, você pode obter as contagens totais usando uma subconsulta e 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;

Infelizmente, acho que você quer usuários distintos em vez de apenas contagens de usuários. Isso torna o problema muito mais difícil, especialmente porque o Postgres não suporta count(distinct) como uma função de janela.

Eu acho que você tem que fazer algum tipo de auto-junção para isso. Aqui está um método:
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;