牛客部分题目的讲解确实有点晦涩难懂,参考了各位的代码和理解(TOP题解 @GAN就完事儿了 的回答已经很清楚了),题目的真实含义如下:

1.最近一个月的定义:距离有播放量的视频的最大日期(包含最大日期当天)不超过30天 —— 即,两个日期相减所得出的天数最大为29天

2.并且,不是求每类视频、各自的发生互动的最近一个月。题目所说的最近一个月,就是互动表tb_user_video_log的最大日期 —— 即不分视频类别,只求发生互动的最近日期

查询语句如下:

SELECT i.tag, 
       SUM(l.if_retweet) AS retweet_cnt,
       ROUND(SUM(l.if_retweet) / COUNT(if_retweet), 3) AS retweet_rate
FROM
    (
        SELECT video_id, DATE(start_time), if_retweet
        FROM tb_user_video_log
        WHERE DATEDIFF((SELECT MAX(DATE(start_time)) FROM tb_user_video_log), DATE(start_time)) <= 29
    ) AS l
INNER JOIN
tb_video_info AS i
ON l.video_id = i.video_id
GROUP BY i.tag
ORDER BY retweet_rate DESC;

另外,给自己做个,计算日期差值的函数的记录:

DATEDIFF(date1, date2):两个日期相减(date1 - date2),返回相差的天数,不能定位到小时、分钟和秒;

TIMESTAMPDIFF(interval, date1, date2):两个日期相减(date2 - date1),可选择返还天数、小时数、秒数等,相对更加灵活。