如图所示,牛客每个人最近的登录日期(五) 此题以通过率来看可以算是目前最难的一道题。
我在做的过程中也是卡了挺久的,但最终在其他答案的点拨下做出来了。
题所给的login表
请你写出一个sql语句查询每个日期新用户的次日留存率,结果保留小数点后面3位数(3位之后的四舍五入),并且查询结果按照日期升序排序。
次日新用户的留存率=次日留存的人数/总的新用户数
1.先求出所有日期的新用户
select user_id,min(date) as date
from login
group by user_id
2.求留存率的一般做法是利用 新用户及日期 left join on a.user_id=b.user_id 就会是 左边 uid 和最小日期 右边就是 uid和所有日期 这时候用case when +datediff()=1函数 就可以求出次日登录的记录
但这个方法并不通用 要求 新用户及日期需要覆盖所有日期 如 牛客每个人最近的登录日期(三)题中就可以这样做 因为新用户的日期刚好覆盖了所有的日期 此题并非如此 所以需要加上一个日期使其变成 题(三)类似的情形
加上一列时间
select * from (
select date
from login
group by date