with tt1 as ( select t1.video_id, t1.start_time, t1.end_time, t1.if_like, t1.if_retweet, t1.comment_id, t2.duration, case when unix_timestamp(end_time) - unix_timestamp(start_time) >= t2.duration then 1 else 0 end as wanbo -- 1为完播 0为未完播 from tb_user_video_log t1 join tb_video_info t2 on t1.video_id = t2.video_id where release_time between date_sub((select max(end_time) from tb_user_video_log),INTERVAL 29 DAY) and (select max(end_time) from tb_user_video_log) and end_time between date_sub((select max(end_time) from tb_user_video_log),INTERVAL 29 DAY) and (select max(end_time) from tb_user_video_log) ), -- select * from tt1; tt2 as( select video_id, sum(if(wanbo = 1,1,0))/count(wanbo) as wanbolv, sum(if_like) as dianzanshu, count(comment_id) as pinglunshu, sum(if_retweet) as zhuanfashu, datediff(date_format((select max(end_time) from tb_user_video_log),'%Y-%m-%d'),date_format(max(end_time),'%Y-%m-%d')) as wubofangtianshu from tt1 group by video_id ) select video_id, round((100*wanbolv+5*dianzanshu+3*pinglunshu+2*zhuanfashu)*(1/(wubofangtianshu+1))) as hot_index from tt2 order by hot_index desc limit 3;