Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Ruchome dzienne liczby odrębne

Pierwszą rzeczą do zrobienia jest wygenerowanie listy dni, które Cię interesują:

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

Spowoduje to wygenerowanie tabeli dat od 1 stycznia tego roku do dnia dzisiejszego. Dołącz do tego podzapytania. Korzystanie z łączenia krzyżowego może nie być szczególnie wydajne, w zależności od ilości danych w zakresie. Dlatego potraktuj to jako dowód koncepcji i dostosuj zgodnie z potrzebami.

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. dynamiczne przekazywanie nazwy tabeli i kolumny za pomocą zmiennych bind

  2. Oracle SQL:Użyj sekwencji we wstawce z instrukcją Select

  3. Jak ustalić optymalny rozmiar pobierania dla zapytania wybierającego?

  4. Nie można zarejestrować się w transakcji

  5. Jak rozwiązać ORA-00939:zbyt wiele argumentów dla błędu funkcji?