PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Запитване за DAU/MAU във времето (ежедневно)

Ако приемем, че имате стойности за всеки ден, можете да получите общия брой, като използвате подзаявка и 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;

За съжаление, мисля, че искате отделни потребители, а не само брой потребители. Това прави проблема много по-труден, особено защото Postgres не поддържа count(distinct) като функция за прозорец.

Мисля, че трябва да направите някакъв вид самостоятелно присъединяване за това. Ето един метод:

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 psycopg2 връща кортеж от низове вместо кортеж от кортежи?

  2. UTF-8 / Unicode кодиране на текст с RPostgreSQL

  3. Функция на Postgres за валидиране на имейл адрес

  4. Не може да използва uuid и да създаде разширение, за да го използва

  5. PostgreSQL - Филтриране на период от време