【问题标题】:Count occurence of values between 2 dynamic dates in MySQL计算 MySQL 中 2 个动态日期之间值的出现次数
【发布时间】:2016-05-03 14:35:55
【问题描述】:

我有一个表格,其中包含一个用户的每个事件的行。我想检索在同一周 (最多间隔 7 天) 中获得 2 个或更多事件的每个用户。

事件表:

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 中完成吗?

【问题讨论】:

  • 日历周或它们之间最多 7 天?
  • 他们之间最多 7 天。我会更新问题,谢谢。
  • 第一次发生后最多 7 天?例如。 4 月 1 日、4 月 3 日、4 月 5 日、4 月 8 日。结果应该是什么?
  • 我只需要在同一 7 天内至少有两个用户的列表。计数并不重要。

标签: mysql sql date count


【解决方案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)

【讨论】:

  • &gt; 应该是&lt;
【解决方案2】:

如果您只需要知道他们是否在同一周内有 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)

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多