SELECT
dt,
-- 可能会出现同一天某个用户多次登录的场景,所以需要去重
COUNT(DISTINCT uid) AS dau,
ROUND(COUNT(DISTINCT uid_1) / COUNT(DISTINCT uid), 2) AS uv_new_ratio
FROM
-- 第一张子表:统计每天的登记情况
(SELECT uid, DATE(in_time) AS dt
FROM tb_user_log
UNION ALL
SELECT uid, DATE(out_time) AS dt
FROM tb_user_log) AS t1
LEFT JOIN
-- 第二张子表:统计每个用户的初次登录情况
(SELECT uid AS uid_1, MIN(DATE(in_time)) AS dt_1
FROM tb_user_log
GROUP BY uid) AS t2
ON t1.dt = t2.dt_1 AND t1.uid = t2.uid_1
GROUP BY dt
ORDER BY dt

京公网安备 11010502036488号