PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Truy vấn DAU / MAU theo thời gian (hàng ngày)

Giả sử bạn có các giá trị cho mỗi ngày, bạn có thể nhận được tổng số bằng cách sử dụng truy vấn con và 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;

Thật không may, tôi nghĩ bạn muốn người dùng khác biệt hơn là chỉ số lượng người dùng. Điều đó làm cho vấn đề trở nên khó khăn hơn nhiều, đặc biệt là vì Postgres không hỗ trợ count(distinct) như một chức năng cửa sổ.

Tôi nghĩ rằng bạn phải làm một số loại tự tham gia cho điều này. Đây là một phương pháp:

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. Flask-Migrate không phát hiện bảng

  2. Toán tử PostgreSQL IN với hiệu suất kém truy vấn con

  3. Các hàng có bị khóa theo thứ tự trong câu lệnh SELECT ... ORDER BY ... FOR UPDATE không?

  4. pg_config hiển thị 9,4 thay vì 9,3

  5. truyền số lượng tham số chưa biết vào mệnh đề IN bằng cách sử dụng JDBC và Postgres