【场景】:近一个月

【分类】:日期函数、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