User Activity for the Past 30 Days

Write an SQL query to find the daily active user count for a period of 30 days ending 2019-07-27 inclusively. A user was active on someday if he/she made at least one activity on that day.


Table: Activity
+---------+------------+---------------+---------------+
user_id | session_id | activity_date | activity_type |
+---------+------------+---------------+---------------+
1       | 1          | 2019-07-20    | open_session  |
1       | 1          | 2019-07-20    | scroll_down   |
1       | 1          | 2019-07-20    | end_session   |
2       | 4          | 2019-07-20    | open_session  |
2       | 4          | 2019-07-21    | send_message  |
2       | 4          | 2019-07-21    | end_session   |
3       | 2          | 2019-07-21    | open_session  |
3       | 2          | 2019-07-21    | send_message  |
3       | 2          | 2019-07-21    | end_session   |
4       | 3          | 2019-06-25    | open_session  |
4       | 3          | 2019-06-25    | end_session   |
+---------+------------+---------------+---------------+
Result:
+------------+--------------+ 
day        | active_users |
+------------+--------------+ 
2019-07-20 | 2            |
2019-07-21 | 2            |
+------------+--------------+ 

Approach

Oracle

select activity_date as day
,count(distinct user_idas active_users
from Activity
where ((TO_DATE('2019-07-27','YYYY-MM-DD')-activity_date))<30
group by activity_date

Mysql

select activity_date as [day],count(distinct user_idas active_users
from Activity
where DATEDIFF(day,activity_date,'2019-07-27')<30
group by activity_date;


No comments:

Post a Comment