현재 사용자 기반이 어떻게 구성되어 있는지, 앱을 얼마나 자주 사용하는지, 그리고 이탈한 사용자가 얼마나 되는지에 대한 파악
user_pseudo_id
: 사용자 식별자.event_timestamp
: 이벤트 발생 시간.platform
: 사용자가 앱에 접속한 플랫폼(Android 또는 iOS).WITH base AS (
SELECT
DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date,
CAST(user_pseudo_id AS STRING) AS user_pseudo_id,
platform
FROM advanced.app_logs
),
user_activity AS (
SELECT
user_pseudo_id,
MIN(event_date) AS first_event_date,
MAX(event_date) AS last_event_date,
platform
FROM base
GROUP BY user_pseudo_id, platform
),
latest_event_date AS (
SELECT MAX(event_date) AS latest_date FROM base
)
SELECT
platform,
CASE
WHEN DATE_DIFF((SELECT latest_date FROM latest_event_date), last_event_date, DAY) <= 7 THEN 'Active'
WHEN DATE_DIFF((SELECT latest_date FROM latest_event_date), last_event_date, DAY) > 7 AND DATE_DIFF((SELECT latest_date FROM latest_event_date), last_event_date, DAY) <= 30 THEN 'Dormant'
ELSE 'Churned'
END AS user_status,
COUNT(*) AS user_count
FROM user_activity
GROUP BY platform, user_status
ORDER BY platform, user_status;