# 1. 近一个月发布的视频 # 2. 热度最高, 热度=(a*视频完播率+b*点赞数+c*评论数+d*转发数)*新鲜度 -- 新鲜度=1/(最近无播放天数+1);a,b,c,d分别为100、5、3、2 # 最近播放日期以end_time-结束观看时间为准 # 热度保留为整数,并按热度降序排序。 SELECT video_id, ROUND(rd * 1/(no_play_days + 1), 0) AS hot_index FROM( SELECT video_id, DATEDIFF((SELECT MAX(DATE(end_time)) FROM tb_user_video_log), end_day) AS no_play_days, # 最近无播放天数 100 * fr + 5 * like_cnt + 3 * comment_cnt + 2 * retweet_cnt AS rd FROM( SELECT tu.video_id, MAX(DATE(end_time)) AS end_day, # 最近播放日期 SUM(if_like) AS like_cnt, # 点赞数 COUNT(comment_id) AS comment_cnt, # 评论数 SUM(if_retweet) AS retweet_cnt, # 转发数 SUM(IF(TIMESTAMPDIFF(SECOND, start_time, end_time) >= duration, 1, 0)) / COUNT(end_time) AS fr FROM tb_user_video_log tu # 完播率 JOIN tb_video_info tv ON tu.video_id = tv.video_id WHERE DATEDIFF((SELECT MAX(DATE(end_time)) FROM tb_user_video_log), DATE(release_time)) <= 29 # 近一月发布 GROUP BY tu.video_id ) AS tb1 ) AS tb2 ORDER BY hot_index DESC # 条件热度降序排序 LIMIT 3 # top3