Description

Table: Activity

Column NameType
user_idint
session_idint
activity_datedate
activity_typeenum
  • This table may have duplicate rows.
  • The activity_type column is an ENUM (category) of type (‘open_session’, ’end_session’, ‘scroll_down’, ‘send_message’).
  • The table shows the user activities for a social media website.
  • Note that each session belongs to exactly one user.

Problem Statement

Write a solution 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 they made at least one activity on that day.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:

  • Activity table:
user_idsession_idactivity_dateactivity_type
112019-07-20open_session
112019-07-20scroll_down
112019-07-20end_session
242019-07-20open_session
242019-07-21send_message
242019-07-21end_session
322019-07-21open_session
322019-07-21send_message
322019-07-21end_session
432019-06-25open_session
432019-06-25end_session

Output:

dayactive_users
2019-07-202
2019-07-212

Explanation:

  • Note that we do not care about days with zero active users.

Solution

The problem is asking for finding number of active users in the last 30 days. The number of users can be found by user_id column. Basically, you need to find number of distinct user_id per day for the last 30 days. You can filter records for the last 30 days using WHERE activity_date > DATE_SUB('2019-07-27', INTERVAL 30 DAY) AND activity_date <= '2019-07-27' clause.

1SELECT activity_date day, COUNT(DISTINCT user_id) active_users
2    FROM Activity
3    WHERE activity_date > DATE_SUB('2019-07-27', INTERVAL 30 DAY) AND activity_date <= '2019-07-27'
4    GROUP BY day