如何检索每个用户自上次活动以来最近 30 天的活动



>我有这样的表格:

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;

最新更新