题解 | #微博每个用户历史中最大连续签到天数#

微博每个用户历史中最大连续签到天数

http://www.nowcoder.com/practice/4cc8d0eba65146b6a89181cecb59cc29

重点1:针对前面问题中求最大背包值 重点2: row_number窗口函数的使用,根据数据分区排序开窗,以及巧用日期数 重点3: date_sub函数的使用,完成日期相减

SELECT 
    -- 3.根据背包中的差值求最大
    b.user_id, 
    MAX(b.date_days) AS date_days
FROM
    (
        SELECT 
            -- 2.根据签到日期时间计算出差值
            a.user_id, 
            DATE_SUB(a.sign_date, INTERVAL a.ranks day) AS dif, 
            COUNT(1) AS date_days
        FROM
            (
                SELECT 
                    -- 1.根据签到日期时间排序
                    user_id, 
                    sign_date, 
                    ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY sign_date ASC) AS ranks    
                FROM 
                    user_sign_tb
                WHERE 
                    if_sign = 1
            ) a
        GROUP BY a.user_id, dif
    ) b
GROUP BY b.user_id
ORDER BY b.user_id ASC;

全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
07-03 16:02
门头沟学院 Java
今天面试,非常紧张,面试官问我springboot有哪些核心模块都答不上来了,真的对自己无语了!
程序员小白条:28届我勒个去,很多人面试都没机会
查看1道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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