新增用户指历史上首次产生行为的用户,需通过窗口函数或分组取最小时间锁定各用户首次行为时间,再按日期/周/月归类计数,并注意数据清洗与时区统一。
统计新增用户数,核心是识别“首次出现”的用户,再按时间分组汇总。关键不在简单去重,而在于锁定每个用户的第一次注册/登录时间,再按该时间归类计数。
新增用户 ≠ 当日注册用户总数,而是指历史上第一次产生行为(如注册、首次登录)的用户。同一个用户在后续日期重复出现,不应重复计入新增。
常见错误:直接对每日用户ID去重后求和 → 会把老用户当天的活跃误算为新增。
假设有一张 user_register 表,含字段:user_id、register_time(datetime类型):
WITH first_reg AS (
SELECT user_id,
DATE(register_time) AS reg_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY register_time) AS rn
FROM user_register
)
SELECT reg_date, COUNT(*) AS new_user_count
FRO
M first_reg
WHERE rn = 1
GROUP BY reg_date
ORDER BY reg_date;
① 数据源是日志表(如login_log),非注册表:
把 register_time 换成 login_time,逻辑不变——取每个 user_id 的最早 login_time 即为“首次活跃时间”。
② 需要按周/月统计:
将 DATE(register_time) 替换为:
– 周: YEARWEEK(register_time, 1) 或 DATE_SUB(register_time, INTERVAL WEEKDAY(register_time) DAY)
– 月: DATE_FORMAT(register_time, '%Y-%m')
③ 用户标识不唯一?需去重清洗:
若存在测试账号、空user_id、设备号冒用等情况,先在子查询中过滤或标准化,例如:
WHERE user_id IS NOT NULL AND user_id != '' AND user_id NOT LIKE 'test%'