题目中要求是
新登录用户
查询用户的user_id和首次登陆日期,确认是新登录用户。
select user_id,min(date) first_date from login group by user_id
次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率
在1中的表后连接第2天的登陆时间。如果第2天登陆了,l2.date即为第二天的日期,如果第2天没有登陆,l2.date即为null。根据l2.date是否为null,来判断第2天是否登陆。
from (select user_id,min(date) first_date from login group by user_id) l1 left join login l2 on l1.user_id =l2.user_id and l2.date=date_add(l1.first_date,interval 1 day)
则第2天再次登陆的次数为
count(l2.date)
,第1天登陆的新用户数为count(*)
,次日成功留存率为count(l2.date)/count(*)
保存小数点后面3位(3位之后的四舍五入)
使用round()进行修约。
则最终MySQL语句为:
select round(count(l2.date)/count(*),3) p from (select user_id,min(date) first_date from login group by user_id) l1 left join login l2 on l1.user_id =l2.user_id and l2.date=date_add(l1.first_date,interval 1 day)