#明确问题:12号的新用户次留是指在12号是第一次登录,并且在13号也登录了。
#分母:当前日期新用户的特征是 当前日期=该用户所有登录日期的最小值
#分母:当前日期新用户的特征是 当前日期=该用户所有登录日期的最小值
#分子:当前日期作为前一天有该用户的登录记录 并且是第一次登录。(代码中的-1是把某个用户在整张login表的日期-1,12号作为前一天有这个人,说明13号有这个人。)
【易错点】因为分母有可能为0,所以用ifnull(不为null时返回的值,为null时返回的值),这里指定为null时返回0;每天登录用户去个重,避免重复计算用户数(用with temp as 对login表去重或者sum case when ...改为count(distinct case when xxxxx then user_id else null end)。
with temp as( select user_id,date from login group by user_id,date) select date ,ifnull(round((sum(case when (user_id,date)in (select user_id,date_add(date,interval -1 day) from temp) and (user_id,date)in (select user_id,min(date)from temp group by user_id) then 1 else 0 end))/ (sum(case when (user_id,date)in (select user_id,min(date)from temp group by user_id) then 1 else 0 end)),3),0)as p from temp group by date order by date;