【场景】:近一个月
【分类】:日期函数、date_sub
分析思路
难点:
1.近一个月的处理
(1)统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)
找到10月2日这个截至日期
- [使用]:date_sub(start_time,interval 30 day)
(2)转发次数和播放记录
-
[条件]:start_time > NewDate
-
[使用]:count
扩展
前往查看:***********
求解代码
方法一:
with 子句
# 统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)
# 找到10月2日这个截至日期
with
main as(
select
date_sub(start_time,interval 30 day) as NewDate
from tb_user_video_log
order by start_time desc
limit 1
)
# 转发次数和播放记录
select
b.tag,
count(if(if_retweet = 1, 1, null)) as count_z,
round(count(if(if_retweet = 1, 1, null))/count(a.video_id),3) as retweet_rate
from tb_user_video_log a, tb_video_info b, main
where a.video_id = b.video_id
and start_time > NewDate
group by tag
order by retweet_rate desc
方法二:
from子查询
# 转发次数和播放记录
select
b.tag,
count(if(if_retweet = 1, 1, null)) as count_z,
round(count(if(if_retweet = 1, 1, null))/count(a.video_id),3) as retweet_rate
from tb_user_video_log a, tb_video_info b, (
# 统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)
# 找到10月2日这个截至日期
select
date_sub(start_time,interval 30 day) AS NewDate
from tb_user_video_log
order by start_time desc
limit 1
) main
where a.video_id = b.video_id
and start_time > NewDate
group by tag
order by retweet_rate desc