select b.date,
# 统计用户留存率信息
round(count(l2.date)/count(b.date),3) as p
from
# 新用户:寻找日期的最小值,表明用户第一次登陆。可以算做是一个新用户信息
# 将新用户连续两天登陆的用户,两天信息做为一张虚表信息
(
select l1.user_id, min(l1.date) first_date, date_add(min(l1.date),interval 1 day) next_date
from login as l1
group by l1.user_id
) as a
# 将第二天的登陆信息先保存下来
left join login l2 on a.user_id = l2.user_id and a.next_date = l2.date
# 判断同一用户第一天是否登陆
right join (select distinct date from login) as b
on a.first_date = b.date
# 分组条件信息
group by b.date
# 排序操作处理
order by b.date
转的,还要理解,好难啊~~~



京公网安备 11010502036488号