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)をサポートしていないため、問題がはるかに困難になります。 ウィンドウ関数として。

    これには何らかの自己参加が必要だと思います。これが1つの方法です:

    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. C#NHibernateおよびOracleマネージドクライアント

    2. カーソルなしで、別のストアドプロシージャ内からストアドプロシージャの結果を反復処理するにはどうすればよいですか?

    3. 続編エラー:関係が存在しません

    4. symfony 1.4 propel:build-すべてMysql5.5では機能しません