次の列を持つテーブルがあります。
SESSION_ID USER_ID CONNECT_TS
-------------- --------------- ---------------
1 99 2013-01-01 2:23:33
2 101 2013-01-01 2:23:55
3 104 2013-01-01 2:24:41
4 101 2013-01-01 2:24:43
5 233 2013-01-01 2:25:01
毎日のユーザー数と、過去 45 日間にアプリケーションを使用したユーザーとして定義される「アクティブ ユーザー」の数を取得する必要があります。これが私たちが思いついたものですが、もっと良い方法が必要だと感じています:
select trunc(a.connect_ts)
, count(distinct a.user_id) daily_users
, count(distinct b.user_id) active_users
from sessions a
join sessions b
on (b.connect_ts between trunc(a.connect_ts) - 45 and trunc(a.connect_ts))
where a.connect_ts between '01-jan-13' and '12-jun-13'
and b.connect_ts between '01-nov-12' and '12-jun-13'
group by trunc(a.connect_ts);
ウィンドウ関数を調べましたが、個別のカウントがサポートされているようには見えません。また、最初に集計を一時テーブルにロードすることも検討しましたが、ここでも個別のカウントが除外されました。これを行うためのより良い方法はありますか?