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

时间:2017-11-08 14:22:57

标签: mysql

我有一张这样的表:

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()

1 个答案:

答案 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;