sql >> Databasteknik >  >> RDS >> PostgreSQL

Frågar DAU/MAU över tid (dagligen)

Förutsatt att du har värden för varje dag kan du få det totala antalet med hjälp av en underfråga och 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;

Tyvärr tror jag att du vill ha distinkta användare snarare än bara antal användare. Det gör problemet mycket svårare, särskilt eftersom Postgres inte stöder count(distinct) som en fönsterfunktion.

Jag tror att du måste göra någon form av självanslutning för detta. Här är en metod:

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;


  1. Databasuppdateringsordning

  2. använder subquery istället för tabellnamnet

  3. MYSQL-utlösare:JSON_SEARCH ett heltalsvärde i en json-array med heltal

  4. Transponera dynamiska kolumner till rader