PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Membuat kueri DAU/MAU dari waktu ke waktu (harian)

Dengan asumsi Anda memiliki nilai untuk setiap hari, Anda bisa mendapatkan jumlah total menggunakan subquery dan 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;

Sayangnya, saya pikir Anda menginginkan pengguna yang berbeda daripada hanya jumlah pengguna. Itu membuat masalahnya jauh lebih sulit, terutama karena Postgres tidak mendukung count(distinct) sebagai fungsi jendela.

Saya pikir Anda harus melakukan semacam self join untuk ini. Ini salah satu caranya:

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 Fibonacci Sequence - Kueri tidak memiliki tujuan untuk data hasil

  2. TypeORM:Setel skema basis data secara dinamis untuk EntityManager (atau repositori) saat runtime?

  3. Bagaimana cara memasukkan baris yang dikecualikan di RETURNING from INSERT ... ON CONFLICT

  4. FATAL:akar peran tidak ada

  5. PostgreSQL memaksa sintaks SQL standar