2017-11-08 6 views
-1

私が持っているこのようなテーブル:彼らの最後の活動以来、各ユーザのアクティビティの最後の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 

と私の目標は、以来、過去30日間に開かれたもののためにCAMPAIGN_IDを保持することです各user_idの最後のアクション

かなり私の場合は、日付の上限はすべての人にとってNOW()ではなく、最後のアクティビティを行った日です。this

したがって、ユーザー19のためにそれだけで次のようになります。

1 |  19 |   1 | 2017-11-08 
2 |  19 |   6 | 2017-10-10 

ユーザー20のために、それが唯一になる中:

「すべてのUSER_IDはそのを持っているにNOW()から切り替える
4 |  20 |   4 | 2017-06-06 
5 |  20 |   3 | 2017-05-18 

SELECT * FROM mytable WHERE mydate BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
+0

あなたが意味:自身の値が」私は明確ではないことができるものです前回の活動の30日前? – Strawberry

+0

はい私は正確にそれを意味する – user299791

+0

なぜdownvote?何が分かりませんか? – user299791

答えて

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; 
関連する問題