我为一个用户的每个事件都有一个表格。我想检索在同一周 中有2个或更多活动的每个用户(他们之间最多7天)。
活动表:
id - user_id - date
1 - 1 - 2015/04/02
2 - 1 - 2015/04/05
3 - 1 - 2015/09/12
4 - 14 - 2016/01/21
5 - 14 - 2016/02/18
所以预期的结果应该是
user_id - count(date in same week)
1 - 2
user_id 14不应该在结果中,因为它的事件不在同一周。
有人知道如何在MySQL完全完成吗?
答案 0 :(得分:1)
如果您只需要7天内出现次数超过1次的user_id列表,那么您可以EXISTS()
使用DATEDIFF()
SELECT distinct user_id
FROM EventTable e
WHERE EXISTS(SELECT 1 FROM EventTable e2
WHERE ABS(DATEDIFF(e.date,e2.date)) < 7
AND e.user_id = e2.user_id)
答案 1 :(得分:1)
如果您只需要知道他们在同一周内是否有2,那么您可以使用自我加入,条件是第二个表在第一个表的7天内有事件。
SELECT distinct a.user_id
FROM events AS a
JOIN events AS b
ON a.user_id = b.user_id
AND b.date BETWEEN DATE_ADD(a.date, INTERVAL 1 DAY) AND DATE_ADD(a.date, INTERVAL 7 DAY)