PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Odpytywanie DAU/MAU w czasie (codziennie)

Zakładając, że masz wartości dla każdego dnia, możesz uzyskać łączną liczbę za pomocą podzapytania i 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;

Niestety uważam, że potrzebujesz odrębnych użytkowników, a nie tylko liczby użytkowników. To sprawia, że ​​problem jest znacznie trudniejszy, zwłaszcza że Postgres nie obsługuje count(distinct) jako funkcja okna.

Myślę, że w tym celu musisz zrobić coś w rodzaju samodzielnego przyłączenia się. Oto jedna metoda:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL a wersje jądra Linux

  2. PostgreSQL wybiera najnowszy wpis dla danego identyfikatora

  3. zaimportuj plik CSV do postgresa przez php na stronie internetowej

  4. Upsert w Postgresie za pomocą node.js

  5. Znaleźć wiersze, które mają tę samą wartość w jednej kolumnie i inne wartości w innej kolumnie?