SELECT tag,SUM(if_retweet) AS retweet_cnt,ROUND(SUM(if_retweet)/COUNT(tag),3) AS retweet_rate FROM tb_user_video_log JOIN tb_video_info USING(video_id) WHERE 30>DATEDIFF((SELECT MAX(start_time) FROM tb_user_video_log),start_time) GROUP BY tag ORDER BY retweet_rate DESC;
本题要点:
1.关于30天之内的理解
应该是指与当前开始时间(MAX(start_time))相差小于30天的start_time对应的记录
2.时间差值函数总结
(1)DATEDIFF 函数 作用:计算两个日期之间的天数差值,只关注日期部分,会忽略时间部分(时分秒 )。年数只差也会体现在天数上 语法:DATEDIFF(date1, date2) ,返回 date1 - date2 的天数差值(结果为整数,date1 晚于 date2 时结果为正,反之则为负 )。
(2)TIMESTAMPDIFF 函数 作用:可灵活计算两个时间戳在指定时间单位(秒、分钟、小时、天、月、年等 )下的差值,能精确到时分秒。 语法:TIMESTAMPDIFF(unit, start_time, end_time) ,其中 unit 是时间单位(常见取值有 SECOND 秒、MINUTE 分钟、HOUR 小时、DAY 天、MONTH 月、YEAR 年 等 ),返回 end_time - start_time 按指定单位计算的差值。
(3)TIMEDIFF函数
作用:计算两个时间值(TIME 或 DATETIME 类型 )之间的时间差值,结果以 HH:MM:SS 格式的时间类型返回,且要求两个参数类型一致(同为 TIME 或同为 DATETIME )。
语法:TIMEDIFF(time1, time2) ,返回 time1 - time2 的时间差(time1 晚于 time2 时结果为正的时间间隔,反之则为负 )。
(4)SEC_TO_TIME 与 TIME_TO_SEC(辅助计算时间差 )
TIME_TO_SEC:把时间值(TIME 类型 )转换为秒数(整数 ),方便进行数值计算。语法:TIME_TO_SEC(time) 。示例:SELECT TIME_TO_SEC('00:30:00'); -- 返回 1800
SEC_TO_TIME:把秒数(整数 )转换为 HH:MM:SS 格式的时间值。语法:SEC_TO_TIME(seconds) 。示例:SELECT SEC_TO_TIME(1800); -- 返回 '00:30:00'
结合用于时间差:比如先通过 TIMEDIFF 得到时间差,再用 TIME_TO_SEC 转成秒数进行数学运算,最后用 SEC_TO_TIME 转回时间格式,不过实际场景中 TIMESTAMPDIFF 往往能更直接满足需求。

京公网安备 11010502036488号