题解 | #牛客每个人最近的登录日期(五)#
牛客每个人最近的登录日期(五)
https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8
select t1.date,
-- 次日留存数/当日新增数,四舍五入取小数点后三位
round(ifnull(count(t3.date)/count(t2.min_date),0),3)
from (
-- 获得去重排序的日期序列
select date
from login
group by date
order by date
) t1
left join (
-- 每个日期不一定都有新增用户,所以要用left join
-- 这个表用于统计每日新增数,min_date为某用户的新增日期
select user_id,min(date) min_date
from login
group by user_id
order by user_id
) t2 on t1.date=t2.min_date
left join (
-- 新增用户不一定会在次日登录,所以要用left join
-- 这个表用于统计次日留存数
select user_id,date
from login
) t3 on t2.user_id=t3.user_id and datediff(t3.date,t2.min_date)=1
group by t1.date;
