with t1 as ( select substr(t1.start_time,1,10) as dt, t2.tag, sum(if_like) as like_cnt, sum(if_retweet) as retweet_cnt from tb_user_video_log t1 join tb_video_info t2 on t1.video_id = t2.video_id where datediff('2021-10-01 00:00:00',start_time) < 7 group by dt,tag ), t2 as( -- 本币方法,顺着思路就想到一个个union o.0 select tag,dt, sum(like_cnt) over(partition by tag order by dt, like_cnt) as sum_like_cnt_7d, max(retweet_cnt) over(partition by dt, retweet_cnt ) as max_retweet_cnt_7d from t1 where dt between date_sub('2021-10-01',INTERVAL 6 DAY) and '2021-10-01' group by tag,dt ), t3 as( select tag,dt, sum(like_cnt) over(partition by tag order by dt, like_cnt) as sum_like_cnt_7d, max(retweet_cnt) over(partition by dt, retweet_cnt ) as max_retweet_cnt_7d from t1 where dt between date_sub('2021-10-02',INTERVAL 6 DAY) and '2021-10-02' group by tag,dt ), t4 as( select tag,dt, sum(like_cnt) over(partition by tag order by dt, like_cnt) as sum_like_cnt_7d, max(retweet_cnt) over(partition by dt, retweet_cnt ) as max_retweet_cnt_7d from t1 where dt between date_sub('2021-10-03',INTERVAL 6 DAY) and '2021-10-03' group by tag, dt ), t5 as( select tag,max(dt) as dt,max(sum_like_cnt_7d) as sum_like_cnt_7d,max(max_retweet_cnt_7d) as max_retweet_cnt_7d from t2 group by tag union all select tag,max(dt) as dt,max(sum_like_cnt_7d) as sum_like_cnt_7d,max(max_retweet_cnt_7d) as max_retweet_cnt_7d from t3 group by tag union all select tag,max(dt) as dt,max(sum_like_cnt_7d) as sum_like_cnt_7d,max(max_retweet_cnt_7d) as max_retweet_cnt_7d from t4 group by tag )select * from t5 order by tag desc ,dt ;