题解 | #微博每个用户历史中最大连续签到天数#
微博每个用户历史中最大连续签到天数
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;