题解 | #2021年11月每天新用户的次日留存率#

2021年11月每天新用户的次日留存率

https://www.nowcoder.com/practice/1fc0e75f07434ef5ba4f1fb2aa83a450

select A.fir_time as dt, round(count(J.sec_time)/count(A.fir_time),2) as uv_left_rate from
(select uid, min(date(in_time)) as fir_time from tb_user_log group by uid) as A #每日新增用户
left join
(select * from
(select uid, sec_time, if(@pre = uid, @rownum:=@rownum+1,@rownum:=1) as rownum, @pre:= uid from
(select * from
	((select uid, date(in_time)as sec_time from tb_user_log)
	union
	(select uid, date(out_time)as sec_time from tb_user_log))as C
    group by uid, sec_time
    order by uid, sec_time) as G,
(select @pre:='', @rownum:=0) as H) as I
where rownum = 2) as J  #第二次活跃用户
on A.uid = J.uid
group by dt
having dt>= "2021-11-01" and dt< "2021-12-01"
order by dt;

Step 1 求出每日新增用户表

Step 2 求出第二次活跃用户及其第二次活跃时间的数据表

Step 3 将两表join起来

Step 4 通过(第二次活跃用户数/新增用户数)计算留存率

有两个问题尚未解决,希望有大佬能给我一些思路:

1)使用添加行号的方法得出每个用户第二次活跃的时间有些繁琐,是否有更简便的方法

2)此代码没有筛选用户第二次活跃和第一次注册之间相差时候是否是1天,不知道该如何在代码上写出来

#sql##悬赏#
全部评论

相关推荐

08-08 16:33
唐山学院 Java
职场水母:首先,简历太长,对于实习和应届找工作,hr一眼扫的是学历,技术看实习,你写的技术栈字太多了,尽量用一句话概括不用写那么详细,技术面的时候会问的,而且技术栈都会在实习或者项目里体现,你要做的是,把你的简历浓缩为一页,删除没用的东西,比如实践经历,自我评价,这些纯废话,没用,专业技能写的太离谱,你真的熟练掌握了吗,建议都写熟悉,找工作和写论文不一样,追求的是干练和实用,把实习经历和项目提前,把掌握的技术栈写到最后,然后去找实习,
点赞 评论 收藏
分享
08-27 12:02
已编辑
南京外国语学校 网络安全
再来一遍:实则劝各位不要all in华子,不要相信华为hr
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务