You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL计算2018年8月的日度次日用户留存率

2018年8月日度Day-1用户留存计算方案

前提说明

你提供的log_event表存储用户全量行为日志,三个字段分别对应用户ID、行为发生的Unix时间戳、行为类型,本次计算的Day-1留存规则为:Day0注册的用户,在Day1有打开应用行为,即计入Day0的次日留存用户。

计算逻辑

  • 提取2018年8月所有注册用户的注册日期,记为注册日(Day0)
  • 提取所有用户打开应用的行为日期
  • 关联两个数据集,匹配注册用户在注册次日是否有打开行为
  • 按注册日聚合,计算每日次日留存率 = 次日留存用户数 / 当日注册总用户数

实现SQL(MySQL版本)

SELECT 
    reg_date AS '注册日期',
    COUNT(DISTINCT reg_user_id) AS '当日注册用户数',
    COUNT(DISTINCT open_user_id) AS '次日留存用户数',
    ROUND(COUNT(DISTINCT open_user_id) / COUNT(DISTINCT reg_user_id), 4) AS '次日留存率'
FROM (
    -- 提取2018年8月所有注册用户及注册日期
    SELECT 
        user_id AS reg_user_id,
        DATE(FROM_UNIXTIME(event_date_time)) AS reg_date
    FROM log_event
    WHERE event = 'Registered'
    AND DATE(FROM_UNIXTIME(event_date_time)) BETWEEN '2018-08-01' AND '2018-08-31'
) reg_users
LEFT JOIN (
    -- 提取所有用户打开应用的日期
    SELECT 
        user_id AS open_user_id,
        DATE(FROM_UNIXTIME(event_date_time)) AS open_date
    FROM log_event
    WHERE event = 'Opened app'
) open_logs
ON reg_users.reg_user_id = open_logs.open_user_id
AND open_logs.open_date = DATE_ADD(reg_users.reg_date, INTERVAL 1 DAY)
GROUP BY reg_date
ORDER BY reg_date;

兼容说明

如果使用PostgreSQL数据库,将代码中所有FROM_UNIXTIME(event_date_time)替换为to_timestamp(event_date_time)即可,核心逻辑完全一致。你提供的样例数据中仅存在1位2018年8月的注册用户,且该用户无次日打开应用行为,对应计算结果中该日期的次日留存率为0。

内容的提问来源于stack exchange,提问作者ishant kaushik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:27:08