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_id) as active_usersfrom Activitywhere ((TO_DATE('2019-07-27','YYYY-MM-DD')-activity_date))<30group by activity_date
Mysql
select activity_date as [day],count(distinct user_id) as active_usersfrom Activitywhere DATEDIFF(day,activity_date,'2019-07-27')<30group by activity_date;
No comments:
Post a Comment