Hal pertama yang harus dilakukan adalah membuat daftar hari-hari yang menarik bagi Anda:
select (trunc(sysdate, 'yyyy') -1) + level as ts_day
from dual
connect by level <= to_number( to_char(sysdate, 'DDD' ) )
Ini akan menghasilkan tabel tanggal dari 01-JAN tahun ini hingga hari ini. Bergabunglah dengan tabel Anda ke sub-kueri ini. Menggunakan gabungan silang mungkin tidak terlalu efisien, tergantung pada seberapa banyak data yang Anda miliki dalam jangkauan. Jadi tolong anggap ini sebagai bukti konsep dan sesuaikan kebutuhan Anda.
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
/