# 先找到2021/9/25到2021/10/03的数据
with t1 as (
select b.tag, a.if_like, a.if_retweet, a.end_time
from tb_user_video_log as a
left join tb_video_info as b
on a.video_id = b.video_id
where a.end_time between '2021-09-25 00:00:00' and '2021-10-03 23:59:59'
),
t2 as (
# 计算每一个类别每一天的点赞量以及转发量
select date_format(end_time, '%Y-%m-%d') as day, tag, sum(if_like) as like_cnt, sum(if_retweet) as retweet_cnt
from t1
group by date_format(end_time, '%Y-%m-%d'), tag
),# 找到前一个周的总点赞量
t3 as (
select tag, day as dt, sum(like_cnt) over(partition by tag rows between 6 preceding and current row) as sum_like_cnt_7d
from t2
),
t4 as (
select *
from t3
where dt >= '2021-10-01'
),
t5 as (
# 计算单天最大转发量
(select tag, '2021-10-01' as dt, max(retweet_cnt) as max_retweet_cnt_7d
from (
select *
from t2
where day <= '2021-10-01'
) as e
group by tag)
union all
(select tag, '2021-10-02' as dt, max(retweet_cnt) as max_retweet_cnt_7d
from (
select *
from t2
where day <= '2021-10-02'
) as e
group by tag)
union all
(select tag, '2021-10-03' as dt, max(retweet_cnt) as max_retweet_cnt_7d
from (
select *
from t2
where day <= '2021-10-03'
) as e
group by tag)
)
select t4.tag, t4.dt, t4.sum_like_cnt_7d, t5.max_retweet_cnt_7d
from t4
left join t5
on t4.tag = t5.tag and t4.dt = t5.dt
order by t4.tag desc, t4.dt;