【发布时间】:2015-04-14 13:24:28
【问题描述】:
我需要帮助来编写 MySQL 查询。
我有一个满是日志的表,其中一列是 unix 时间戳。 我想对这些记录进行分组(GROUP BY),以便在它们之间的近距离时间(即 5 秒)内发生的事件属于一个组。
例如:
表:
timestamp
----------
1429016966
1429016964
1429016963
1429016960
1429016958
1429016957
1429016950
1429016949
1429016943
1429016941
1429016940
1429016938
加入这样的团体:
GROUP_CONCAT(timestamp) | COUNT(*)
-----------------------------------------------------------------------------
1429016966,1429016964,1429016963,1429016960,1429016958,1429016957 | 6
1429016950,1429016949 | 2
1429016943,1429016941,1429016940,1429016938 | 4
当然我可以在 php 中处理数据数组,但我认为 mysql 会更快。
【问题讨论】:
-
堆栈溢出不是代码编写服务。到目前为止,您尝试过什么?
-
我会尝试解决这个问题,但我已经给出了类似的答案here,这可能对您有所帮助。
-
我知道不是。我已经搜索了几个小时,但我发现最好的是按时间间隔分组,即 10 分钟、1 小时等,其中时间戳除以 600、3600。
-
我不认为你的组是正确的,因为第一组跨越 9 秒,而不是 5 秒。
-
那么问题是组必须包含项目,其中每个项目之间的差异不能大于即 5 秒。整个小组可以是 1 分钟、10 分钟或其他时间。如果差异超过 5 秒,则应创建下一个组。