Oracle
 sql >> база данни >  >> RDS >> Oracle

Подвижни ежедневни отделни преброявания

Първото нещо, което трябва да направите, е да генерирате списък с дните, в които сте интересни:

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

Това ще генерира таблица с дати от 01 януари тази година до днес. Присъединете вашата таблица към тази подзаявка. Използването на кръстосано свързване може да не е особено ефективно в зависимост от това колко данни имате в диапазона. Така че, моля, гледайте на това като на доказателство за концепцията и настройте според нуждите си.

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. Матрица на поддържаните версии на Oracle

  2. rs.last() дава невалидна операция само за препращане на резултати:last

  3. Трудност при SQL JOIN - изглежда има нужда от начин за ограничаване на редове в условие за присъединяване

  4. SSIS не успява да запази пакетите и рестартира Visual Studio

  5. SQL Server, еквивалентен на Oracle НАЙ-МАЛКО?