盐咸咸 level
获赞
3283
粉丝
331
关注
5
看过 TA
1532
集美大学
2015
数据分析师
IP属地:浙江
是闲闲哦~
私信
关注
2022-06-19 13:47
已编辑
集美大学 数据分析师
解题步骤   part1:题目基本信息   1)统计2021年11月每天新用户的次日留存率(保留2位小数)   date_format(时间,‘%Y%m’)=‘202111’   2)次日留存率为当天新增的用户数中第二天又活跃了的用户数占比。     换成容易理解的话就是,新用户的次留率。     3)如果in_time-进入时间和out_time-离开时间跨天了,在两天里都记为该用户活跃过,结果按日期升序,没有新用户,不用输出。    这里可以理解为把out_time也算作是活跃日。     part2:解法1    基本的思路是:用union把in_time和out_time并联起来,对u...
Forwardsummer:第二种方法没过的,试试下面的方法,和楼主的第二种方法一样的思想,纯窗口函数: select dt,round(sum(if(timestampdiff(day,dt,lead_time)=1,1,0))/count(*),2) from( select *, row_number() over(partition by uid order by dt) rk, lead(dt,1) over(partition by uid order by dt) lead_time from( select uid,date(in_time) as dt from tb_user_log union select uid,date(out_time) as dt from tb_user_log )t1 )t2 where rk = 1 group by dt having date_format(dt,'%Y-%m') = '2021-11' order by dt 这里引用Cole4Youreyez用户的结论: “该题有一个易错点,那就是题目中第一句话就说明了在十一月份的,可能做题人会考虑在建立表t时就直接where语句选出11月的,这样是错误的。 原因在于:在建立表t是where会先运行,也就是选择了11月的信息再进行排序。那么如果一个用户10月活跃过,在11月中,11月2号和3号活跃了,这样的操作会使得该用户11-02的排名rk=1,也会被我们认为是新用户,但是显然并非如此。”
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务