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。