sql >> Databasteknik >  >> RDS >> Oracle

Rullande dagliga distinkta räkningar

Det första du ska göra är att skapa en lista över de dagar du är intressant i:

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

Detta kommer att generera en tabell över datum från 01-JAN i år till idag. Anslut ditt bord till denna underfråga. Att använda en korskoppling kanske inte är särskilt effektivt, beroende på hur mycket data du har i intervallet. Så vänligen se detta som ett bevis på konceptet och ställ in 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. Generera datum mellan datumintervall

  2. Hur kan jag infoga tidsstämpel med tidszon i postgresql med förberedd sats?

  3. Problem med att infoga från python-skript i mysql-databas med innondb-motor

  4. Finns det ett MySQL-kommando släpp alla index utom PRIMARY index?