题解 | #牛客每个人最近的登录日期(五)#

牛客每个人最近的登录日期(五)

http://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8

WITH t1 AS (SELECT user_id,min(l.date) earlist_date FROM login l GROUP BY 1),
t2 AS (SELECT t1.user_id,t1.earlist_date,CASE WHEN date(t1.earlist_date, '+1 day') IN 
       (SELECT date FROM login l WHERE t1.user_id=l.user_id) THEN 1 ELSE 0 END 
       AS liucun FROM t1),
t3 AS (SELECT t2.earlist_date,ROUND(SUM(t2.liucun)*1.0/COUNT(t2.liucun),3) p 
       FROM t2 GROUP BY 1)
SELECT t3.earlist_date date,t3.p 
FROM t3
UNION
SELECT date,0.000 AS p 
FROM login l 
WHERE date NOT IN (SELECT t3.earlist_date FROM t3)
ORDER BY 1;

比不上各位大佬,但是如果用各种子查询慢慢做,还是可以做出来的。 首先选出每个ID第一次登录的时间记为t1,其次,判断第一次登录后的日期加一天后是否还在原表中对应ID的日期里,是就记为1,否就是0. 然后,计算留存率。最后把剩余留存率为0的日期添加进去再排序就可以。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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