[SQL 문제 풀이] User Activity for the Past 30 Days I (지난 30일 동안의 사용자 활동 I)

Stupefyee's avatar
Jun 11, 2025
[SQL 문제 풀이] User Activity for the Past 30 Days I (지난 30일 동안의 사용자 활동 I)
User Activity for the Past 30 Days I - LeetCode
Can you solve this real interview question? User Activity for the Past 30 Days I - Table: Activity +---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | +---------------+---------+ 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.   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_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 | +---------+------------+---------------+---------------+ Output: +------------+--------------+ | day | active_users | +------------+--------------+ | 2019-07-20 | 2 | | 2019-07-21 | 2 | +------------+--------------+ Explanation: Note that we do not care about days with zero active users.
User Activity for the Past 30 Days I - LeetCode
notion image
2019727일까지 30일 동안의 일일 활성 사용자 수를 포함하여 찾기 위한 솔루션을 작성하세요. 사용자가 그 날에 적어도 하나의 활동을 했다면 언젠가는 활성 상태였습니다. 결과 테이블을 순서에 상관없이 반환하세요.
 

내가 작성한 쿼리

Oracle

SELECT TO_CHAR(activity_date, 'YYYY-MM-DD') AS day, COUNT(DISTINCT user_id) AS active_users FROM Activity WHERE activity_date BETWEEN TO_DATE('2019-07-27', 'YYYY-MM-DD') - 29 AND TO_DATE('2019-07-27', 'YYYY-MM-DD') GROUP BY activity_date;

MySQL

SELECT activity_date AS day, COUNT(DISTINCT user_id) AS active_users FROM Activity WHERE activity_date BETWEEN DATE_SUB('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27' GROUP BY activity_date;

차이점

  • 날짜 범위 설정 방식의 차이
    • MySQ: DATE_SUB(날짜, INTERVAL 빼고_싶은_수치 단위)
    • Oracle: 날짜 - 정수
 
Share article

stupefyee