sql >> Base de Datos >  >> RDS >> PostgreSQL

Consulta de DAU/MAU a lo largo del tiempo (diariamente)

Suponiendo que tiene valores para cada día, puede obtener los recuentos totales mediante una subconsulta y 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;

Desafortunadamente, creo que desea usuarios distintos en lugar de solo recuentos de usuarios. Eso hace que el problema sea mucho más difícil, especialmente porque Postgres no admite count(distinct) como una función de ventana.

Creo que tienes que hacer algún tipo de unión automática para esto. Aquí hay un 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;