我有一张这样的表:
id | user_id | campaign_id | mydate
1 | 19 | 1 | 2017-11-08
2 | 19 | 6 | 2017-10-10
3 | 19 | 5 | 2017-10-06
4 | 20 | 4 | 2017-06-06
5 | 20 | 3 | 2017-05-18
6 | 20 | 2 | 2017-01-01
我的目标是保留自每个user_id上一次操作以来最近30天内打开的广告系列的campaign_id。
非常符合this的精神,但在我的情况下,日期的上限不是每个人的NOW(),而是他们上次活动的日期。
因此,对于用户19,它将只是:
1 | 19 | 1 | 2017-11-08
2 | 19 | 6 | 2017-10-10
对于用户20,它只是:
4 | 20 | 4 | 2017-06-06
5 | 20 | 3 | 2017-05-18
从NOW()切换到“每个user_id都有自己的值”是我无法表达的:
SELECT * FROM mytable WHERE mydate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
答案 0 :(得分:0)
SELECT x.*
FROM my_table x
JOIN
( SELECT user_id, MAX(mydate) mydate FROM my_table GROUP BY user_id) y
ON y.user_id = x.user_id
AND y.mydate - INTERVAL 30 DAY < x.mydate;