WITH t1 AS (
    SELECT
    DATE(MAX(start_time)) AS max_date,
    DATE_ADD(DATE(MAX(start_time)), INTERVAL -29 DAY) AS min_date
    FROM tb_user_video_log
),
t2 AS (
    SELECT tu.*,
           tv.tag,
           t1.*
    FROM tb_user_video_log tu
        JOIN t1
    LEFT JOIN tb_video_info tv
    ON tu.video_id = tv.video_id
    WHERE DATE(start_time) BETWEEN min_date AND max_date
),
t3 AS (
    SELECT tag,
           sum(if_retweet) AS retweet_cnt,
           count(tag) AS total
    FROM t2
    group by tag
),
t4 AS (
    SELECT tag,
           retweet_cnt,
           ROUND(retweet_cnt / total, 3) AS retweet_rate
    FROM t3
)
SELECT * FROM t4
ORDER BY retweet_rate DESC;

# 关键还是在于近30天的规则,是29。