select video_id ,CONVERT(int,(avg(if_comp*1.0) * 100 + 5 * sum(if_like*1.0) + 3 * sum(is_comment*1.0) + 2 * sum(if_retweet*1.0)) * (1.0 / (1 + min(diff_time))),0) hot_index from ( SELECT a.video_id ,CASE WHEN DATEDIFF(second,a.start_time,a.end_time) >= b.duration THEN 1 ELSE 0 END AS if_comp ,if_like ,CASE WHEN a.comment_id is null THEN 0 ELSE 1 END as is_comment ,if_retweet ,abs(datediff(day,(select max(end_time) from tb_user_video_log),end_time)) diff_time from tb_user_video_log a left join tb_video_info b on a.video_id = b.video_id where ABS(DATEDIFF(DAY,(select max(end_time) from tb_user_video_log),release_time)) < 30 ) t group by t.video_id order by CONVERT(int,(avg(if_comp*1.0) * 100 + 5 * sum(if_like*1.0) + 3 * sum(is_comment*1.0) + 2 * sum(if_retweet*1.0)) * (1.0 / (1 + min(diff_time))),0) desc
select video_id ,round((avg(if_comp) * 100 + 5 * sum(if_like) + 3 * sum(is_comment) + 2 * sum(if_retweet)) * (1 / (1 + min(diff_time)))) hot_index from ( select log.video_id video_id ,if(timestampdiff(second,start_time,end_time) >= duration, 1, 0) as if_comp ,if_like ,if(comment_id is null, 0 ,1) as is_comment ,if_retweet ,abs(datediff(end_time, (select max(end_time) from tb_user_video_log))) diff_time from tb_user_video_log log left join tb_video_info info on log.video_id = info.video_id where abs(datediff(release_time, (select max(end_time) from tb_user_video_log))) < 30 ) a group by 1 order by 2 desc limit 3;