PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Interrogazione DAU/MAU nel tempo (giornaliera)

Supponendo che tu disponga di valori per ogni giorno, puoi ottenere i conteggi totali utilizzando una sottoquery e un 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;

Sfortunatamente, penso che tu voglia utenti distinti piuttosto che solo conteggi di utenti. Ciò rende il problema molto più difficile, soprattutto perché Postgres non supporta count(distinct) come funzione della finestra.

Penso che tu debba fare una sorta di auto-unione per questo. Ecco un metodo:

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;