# 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