sql >> Database >  >> RDS >> Oracle

Rollende dagelijkse verschillende tellingen

Het eerste dat u moet doen, is een lijst maken van de dagen waarin u geïnteresseerd bent:

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

Dit genereert een tabel met datums van 01-JAN dit jaar tot vandaag. Voeg uw tabel toe aan deze subquery. Het gebruik van een cross-join is misschien niet bijzonder efficiënt, afhankelijk van hoeveel gegevens u in het bereik hebt. Beschouw dit dus als een proof of concept en stem af zoals je wilt.

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. Ontwerp van database met sociale webapplicaties:hoe kan ik dit schema verbeteren?

  2. rijen bijwerken in plaats van nieuwe database met invoer te maken android

  3. Hoe de volgorde van invoeging in SQL Server te behouden?

  4. django hoe modellen te definiëren voor bestaande veel tot veel tabellen in de postgresql-database