牛客部分题目的讲解确实有点晦涩难懂,参考了各位的代码和理解(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),可选择返还天数、小时数、秒数等,相对更加灵活。