【问题标题】:Count no of data in time interval with more than统计时间间隔内的数据个数大于
【发布时间】:2016-01-25 15:59:02
【问题描述】:

假设我有一张这样的桌子

id user_id activity_id start_time           duration
1   1       1          2015-12-02 12:24:22   00:17:25
1   1       2          2015-12-02 12:25:22   00:17:25
1   1       3          2015-12-02 12:26:22   00:17:25
1   1       4          2015-12-02 12:26:22   00:17:25
1   1       4          2015-12-02 12:27:22   00:17:25
1   1       4          2015-12-02 12:29:22   00:17:25
1   1       4          2015-12-02 12:33:22   00:17:25

现在,假设我需要一个查询,例如计算 3 分钟内的数字 像 12:24:22 是 4 它得到计数 24 25 和 26 12:25:22 是 2 它得到计数 25 和 24 12:25:22 是 4 它得到计数 25 26 和 27 12:26:22 是 4 它得到计数 24 25 和 26 12:26:22 是 3 它得到计数 26 和 27 即它得到接近 3 分钟的计数。

(但实际上,我的间隔时间是 10 分钟)。 我需要在每个间隔内的每分钟附近计数。我看到一些解决方案,例如 MySQL GROUP BY DateTime +/- 3 seconds。但我不明白我如何在我的诉讼中应用它。你能给我一些关于如何使用它的提示吗? 提前致谢。

【问题讨论】:

  • 为什么“12:24:22 是 2 12:25:22 是 3 12:26:22 是 3”?请更好地解释它..我会尽力回答你..等待您的评论或编辑
  • 我有编辑,请检查@LucaGiardina

标签: mysql group-by


【解决方案1】:

怎么样:

SELECT t1.start_time, COUNT(*) FROM table AS t1
CROSS JOIN table AS t2
WHERE ABS(TIMESTAMPDIFF(MINUTE, t1.start_time, t2.start_time)) < 10
GROUP BY t1.start_time

请注意,这将在规定时间的 10 分钟内与 start_times 匹配。

【讨论】:

    【解决方案2】:
    SELECT a.*, COUNT(a.start_time) AS TOT
    FROM `your_table`AS a
    INNER JOIN `your_table` AS b
    WHERE ABS(TIME_TO_SEC(a.start_time) - TIME_TO_SEC(b.start_time)) < 180
    GROUP BY a.start_time
    

    其中 180 = 3 分钟(180 秒)

    @Jonathan Twite 回答也有效

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多