with temp as (
    select tag,substr(end_time,1,10) as dt,start_time,if_like,if_retweet
    from tb_user_video_log tuvl
    left join tb_video_info tvi on tuvl.video_id = tvi.video_id
),
temp1 as (
    select tag,dt,
    sum(sum(if_like)) over(partition by tag order by dt rows 6 preceding) as like_cnt,
    max(sum(if_retweet)) over(partition by tag order by dt rows 6 preceding) as retweet_cnt
    from temp
    where DATEDIFF('2021-10-03',DATE_FORMAT(start_time,'%Y-%m-%d'))<9
    group by tag,dt
)
select * from temp1 
where dt between '2021-10-01' and '2021-10-03'
order by tag desc,dt asc;

知识补充

按照格式要求修改数据,首先是日期格式,其次需要转发量和点赞量。而且说的当天内的近7天,这里会用到开窗函数的框架限定算数,内容如下:

  • rows n perceding:从当前行到前n行(一共n+1行)
  • rang/rows between 边界规则1 and 边界规则2:rang表示按照值的范围进行定义框架,rows表示按照行的范围进行定义框架

举例说明:

rows between 2 perceding and 2 following #当前行往前2行+当前行+当前行往后2行(一共5行)

rows between 1 following 3 following #当前行的后1——>后3(共3行)

rows between unbounded preceding and current row #从第一行到当前行

解题步骤

1、首先是按照要求修改数据格式

2、再就是算出每天的转发总量和点赞总量,然后算出后再使用开窗函数计算近7天的值,rows 6 preceding

3、最后再查询上表,日期规定在这三天之间,这样还可以进行比较,算出最大值。