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

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

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

SELECT 
       l.date,
       round(ifnull(sum((m.user_id,date_add(m.min_date,interval 1 day)) in 
                   (select user_id,date from login))/count(m.user_id),0),3) p
# 计算第2天登录的次数/第一天登录次数。      
FROM login l
LEFT JOIN 
        (
        SELECT user_id,
            min(date) min_date
        FROM login
        GROUP BY user_id
        ) m
ON l.user_id=m.user_id
and l.date=min_date
GROUP BY l.date
order by l.date
;
#-------------------------------------------------------------------------------
# 利用窗口函数计算比较简单
select date,
       round(ifnull(sum(datediff(l_date,date)=1)/sum(date=f_date),0),3) p
from(        
select *,
    FIRST_VALUE(date)over(partition by user_id order by date) f_date,
    lead(date,1)over(partition by user_id order by date) l_date
from login
) f
group by date
;
全部评论

相关推荐

不知名bang:感觉三个项目可以融在一起,比如上层是用手写的epoll,然后到tcp聊天层,然后你写了一个后台监控(不过我也不懂c++,但是感觉写一个大项目比三个小项目要好)
我的求职进度条
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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