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

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

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;

全部评论

相关推荐

03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务