>我有这样的表格:
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。
几乎符合这种精神,但就我而言,日期的上限不是每个人的 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()
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;