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、最后再查询上表,日期规定在这三天之间,这样还可以进行比较,算出最大值。