题解 | #2021年11月每天新用户的次日留存率#
2021年11月每天新用户的次日留存率
https://www.nowcoder.com/practice/1fc0e75f07434ef5ba4f1fb2aa83a450
求次日留存率新方法(如果in_time-进入时间和out_time-离开时间跨天了,在两天里都记为该用户活跃过时):
1.先根据uid和dt去重后,查出in_time和out_time两张表union起来,此时得到的就是前一天和后一天合并起来的用户活跃表
2.根据用户活跃表,用min()over()查出用户的首次登录时间,用lead()over()将每行数据往后推一行,如果此行不为空,则说明此用户已经连续两天活跃了,查出的表记为t1
3.从t1中查出dt,接下来就是求次日留存率,首先如果满足dt=new_dt,timestampdiff(day,dt,next_dt)=1说明此用户满足次日留存,将其记为1否则为0;将这样的记录用sum()求和即为总的次日留存的用户;其次就是求所有新用户,即dt=new_dt时,用户即为新用户,用sum()将其求和得到新用户数,与前面的满足次日留存的用户相除得到次日留存率
4.注意按照dt分组、按照dt从小到大排序、次日留存率为0的不要