sql >> Database teknologi >  >> RDS >> Oracle

Rullende daglige distinkte tæller

Den første ting at gøre er at generere en liste over de dage, du er interessant i:

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

Dette vil generere en tabel med datoer fra 01-JAN i år til i dag. Slut dig til din tabel til denne underforespørgsel. Brug af en krydsforbindelse er muligvis ikke særlig effektiv, afhængigt af hvor meget data du har i området. Så se venligst dette som et bevis på konceptet og tune efter behov.

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. Erstat alle felter i MySQL

  2. MySQL Views:Henvisning til et beregnet felt (ved navn) i et andet beregnet felt

  3. psql returkode, hvis der blev fundet nul rækker

  4. side for hver række i mysql