sql >> データベース >  >> RDS >> Oracle

ローリングデイリーディスティンクトカウント

    最初に行うことは、興味のある日のリストを生成することです:

    select (trunc(sysdate, 'yyyy') -1) + level as ts_day
    from dual
    connect by level <= to_number( to_char(sysdate, 'DDD' ) )
    

    これにより、今年の1月1日から今日までの日付のテーブルが生成されます。テーブルをこのサブクエリに結合します。範囲内のデータ量によっては、クロス結合の使用は特に効率的ではない場合があります。したがって、これを概念実証と見なし、必要に応じて調整してください。

    with days as
     ( select (trunc(sysdate, 'yyyy') -1) + level as ts_day
       from dual
       connect by level <= to_number( to_char(sysdate, 'DDD' ) ) )
    select days.ts_day
           , sum ( case when trunc(connect_ts) = ts_day then 1 else 0 end ) as daily_users
           , sum ( case when trunc(connect_ts) between ts_day - 45 and ts_day then 1 else 0 end ) as active_users
    from days
         cross join sessions  
    where connect_ts between trunc(sysdate, 'yyyy') - 45 and sysdate
    group by ts_day
    order by ts_day
    /
    


    1. Postgresql-シーケンス式の変更でサブクエリを使用する

    2. MYSQL選択クエリでトリムを使用する方法

    3. サーバーの負荷を減らすためのMySQLクエリ

    4. Laravel'ドライバーが見つかりませんでした(SQL:insert into ...'