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

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

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

  1. 次日留存同一时间段相关的问题都要注意看in_time & Out_time 的关系,都可以参考union all 将开始和停止独立出来做相互隔离的事件
  2. 解题思路:因为登录登出跨天算两天登陆,则可以把时间看作相互独立事件。首先unionall 求独立的时间拉链表。其次求出每个uid的first——login date。最后join 合并成新表即 uid,操作时间,首次登陆天,是否为次日(1是/0否)。之后总结进行按天,用户分类统计是否有次日留存情况。总会进行按天汇总和求平均留存率

WITH dt_log AS (
    SELECT uid, in_time AS dt FROM tb_user_log
    UNION ALL
    SELECT uid, out_time AS dt FROM tb_user_log
), firstLogin AS (
    SELECT uid, date_format(MIN(dt),'%Y-%m-%d') AS first_login_dt
    FROM dt_log
    GROUP BY uid
), nextDayActivity AS (
    select dl.uid as uid,date_format(dl.dt,'%Y-%m-%d') as dt,fl.first_login_dt as fl_dt, case when date_format(dl.dt,'%Y-%m-%d')  = date_add(fl.first_login_dt,interval 1 day) then 1 else 0 end as isNull
    from dt_log dl left join firstLogin fl on dl.uid = fl.uid
    order by dl.uid,dl.dt

)

select t2.fl_dt as dt,round(avg(isChurn),2) as uv_left_rate
from (
select fl_dt,case when sum(isNull) >= 1 then 1 else 0 end as isChurn
from nextDayActivity
group by fl_dt,uid) t2
where t2.fl_dt >= '2021-11-01'
group by t2.fl_dt



# select dt
#         aa as uv_left_rate
# from tb_user_log
# group by dt

全部评论

相关推荐

仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
点赞 评论 收藏
分享
来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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