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

Forespørgsel på DAU/MAU over tid (dagligt)

Forudsat at du har værdier for hver dag, kan du få det samlede antal ved hjælp af en underforespørgsel og 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;

Desværre tror jeg, at du vil have distinkte brugere frem for blot brugertællinger. Det gør problemet meget vanskeligere, især fordi Postgres ikke understøtter count(distinct) som en vinduesfunktion.

Jeg tror, ​​du er nødt til at gøre en slags selvtilslutning for dette. Her er en metode:

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. Find alle skæringspunkter for alle sæt intervaller i PostgreSQL

  2. Hvordan laver man postgresql-array med små bogstaver?

  3. Automatiser mysql_secure_installation med echo-kommando via et shell-script

  4. Objektet i klassen Database kunne ikke konverteres til streng