Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hitungan Berbeda Harian Bergulir

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
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jenis TABEL atau VARRAY anonim di Oracle

  2. Cara memasukkan data secara massal dari kursor ref ke tabel sementara di PL/SQL

  3. Perbedaan Antara Stempel Waktu dalam Milidetik di Oracle

  4. Pemformatan string menggunakan LISTAGG di Oracle. Melarikan diri dari kutipan tunggal ` `

  5. CLOB vs. VARCHAR2 dan apakah ada alternatif lain?