| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- WITH
- -- 为每个设备确定主要国家(基于最早的注册活动)
- device_primary_country AS (
- SELECT
- DeviceId,
- RegisterDate,
- min_by(Country, RequestTime) as primary_country
- FROM user_days_ads
- WHERE RegisterDate BETWEEN '2025-08-13' AND '2025-09-11' AND ProductCode != ''
- GROUP BY DeviceId, RegisterDate
- ),
- -- 预先计算每个设备的留存状态,避免重复计算
- retention_data AS (
- SELECT
- DeviceId,
- RegisterDate,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 1, 1, 0)) as day1_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 2, 1, 0)) as day2_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 3, 1, 0)) as day3_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 4, 1, 0)) as day4_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 5, 1, 0)) as day5_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 6, 1, 0)) as day6_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 7, 1, 0)) as day7_retained,
- MAX(IF(DATEDIFF(BjRequestDate, RegisterDate) = 8, 1, 0)) as day8_retained
- FROM user_days_ads
- WHERE RegisterDate BETWEEN '2025-09-10' AND '2025-09-10' AND ProductCode != ''
- GROUP BY DeviceId, RegisterDate
- ),
- -- 基于主要国家统计特定国家数据
- country_stats AS (
- SELECT
- dpc.RegisterDate as date,
- dpc.primary_country as title,
- CONCAT_WS(',',
- CAST(COUNT(DISTINCT(dpc.DeviceId)) AS STRING),
- CAST(SUM(rd.day1_retained) AS STRING),
- CAST(SUM(rd.day2_retained) AS STRING),
- CAST(SUM(rd.day3_retained) AS STRING),
- CAST(SUM(rd.day4_retained) AS STRING),
- CAST(SUM(rd.day5_retained) AS STRING),
- CAST(SUM(rd.day6_retained) AS STRING),
- CAST(SUM(rd.day7_retained) AS STRING),
- CAST(SUM(rd.day8_retained) AS STRING)
- ) as days_str
- FROM device_primary_country dpc
- LEFT JOIN retention_data rd ON dpc.DeviceId = rd.DeviceId AND dpc.RegisterDate = rd.RegisterDate
- WHERE dpc.RegisterDate BETWEEN '2025-09-10' AND '2025-09-10'
- AND dpc.primary_country IN ('mm','ir','us')
- GROUP BY dpc.RegisterDate, dpc.primary_country
- ),
- -- 总计数据(每个设备只计算一次)
- total_stats AS (
- SELECT
- dpc.RegisterDate as date,
- 'total' as title,
- CONCAT_WS(',',
- CAST(COUNT(DISTINCT(dpc.DeviceId)) AS STRING),
- CAST(SUM(rd.day1_retained) AS STRING),
- CAST(SUM(rd.day2_retained) AS STRING),
- CAST(SUM(rd.day3_retained) AS STRING),
- CAST(SUM(rd.day4_retained) AS STRING),
- CAST(SUM(rd.day5_retained) AS STRING),
- CAST(SUM(rd.day6_retained) AS STRING),
- CAST(SUM(rd.day7_retained) AS STRING),
- CAST(SUM(rd.day8_retained) AS STRING)
- ) as days_str
- FROM device_primary_country dpc
- LEFT JOIN retention_data rd ON dpc.DeviceId = rd.DeviceId AND dpc.RegisterDate = rd.RegisterDate
- WHERE dpc.RegisterDate BETWEEN '2025-09-10' AND '2025-09-10'
- GROUP BY dpc.RegisterDate
- )
- -- 合并国家数据和总计数据
- SELECT * FROM country_stats
- UNION ALL
- SELECT * FROM total_stats
- ORDER BY
- date,
- CASE
- WHEN title = 'total' THEN 1
- ELSE 2
- END,
- title;
|