MySQL GROUP BY DateTime,精度为/- 3 秒
问题陈述
给定包含 ID、时间戳和标题列的表,目标是将 3 秒内出现的记录分组。在这种情况下,时间戳为 15:00:00 和 15:00:02 的行将被分组在一起。
解决方案
而不是识别基于链的开头对于各个行,让我们关注链接时间戳。
查询 1:确定链起始时间戳
<code class="mysql">SELECT DISTINCT Timestamp FROM Table a LEFT JOIN Table b ON (b.Timestamp >= a.Timestamp - INTERVAL 3 SECONDS AND b.Timestamp < a.Timestamp) WHERE b.Timestamp IS NULL
此查询返回在其上方没有时间戳的时间戳3 秒,表示链的开始。
查询 2:将记录与链开始时间戳关联
<code class="mysql">SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime FROM Table JOIN ([query #1]) StartOfChains ON Table.Timestamp >= StartOfChains.TimeStamp GROUP BY Table.id</code>
对于每一行,此查询标识最大的链- 开始时间戳(出现在行时间戳之前)。
最终 GROUP BY 操作
<code class="mysql">SELECT COUNT(*) --or whatever FROM Table JOIN ([query #2]) GroupingQuery ON Table.id = GroupingQuery.id GROUP BY GroupingQuery.ChainStartTime</code>
此查询使用查询 2 中的 GroupingQuery 表根据以下条件对记录进行分组ChainStartTime 列,启用每个时间组内的聚合计算。
以上是在 MySQL 中处理日期时间数据时如何实现 GROUP BY 3 秒的精度?的详细内容。更多信息请关注PHP中文网其他相关文章!