计算MySQL中两个动态日期之间的值的出现次数

时间:2016-05-03 14:35:55

标签: mysql sql date count

我为一个用户的每个事件都有一个表格。我想检索在同一周 中有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完全完成吗?

2 个答案:

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