sql >> Databáze >  >> RDS >> Oracle

Rolling Daily Distint Counts

První věc, kterou musíte udělat, je vygenerovat seznam dnů, které vás zajímají:

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

Tím se vygeneruje tabulka dat od 1. ledna letošního roku do dneška. Připojte svůj stůl k tomuto dílčímu dotazu. Použití křížového spojení nemusí být zvláště efektivní v závislosti na tom, kolik dat máte v rozsahu. Berte to prosím jako důkaz konceptu a nalaďte si to, jak potřebujete.

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. VLOŽTE skutečné číslo do sloupce na základě jiných sloupců STARÉ VLOŽENÍ

  2. Věci, které musíte vědět o tabulce FND_LOBS v Oracle Apps

  3. Mám používat trvalé připojení mysql?

  4. co je skutečnou příčinou chyby mysql 1442?