4

我有一个包含事件的数据库。每个事件都有一个时间戳。事件在白天均匀分布,但每天晚上都有一个没有数据的时间跨度。我的问题是夜晚的定义不明确。可以是从晚上 23 点到第二天早上 7 点,或者是从凌晨 2 点到第二天早上 10 点,甚至是从晚上 8 点到第二天晚上 23 点。

现在我想计算事件的间隔,但没有没有事件的大时间跨度。但我不知道如何找到这个时间跨度。我的问题是,可能有几天没有时间跨度,或者有两天时间跨度相同(例如晚上 8 点到第一天的午夜,午夜到第二天的早上 7 点)。

我现在的问题是:如何找到这个时间跨度?

我更喜欢仅在 MySql 中的解决方案,但如果不可能,也可以使用 PHP。

4

2 回答 2

2

如何将一个表自连接到下一行,然后在连接的表之间进行时间差异,并找到最大差异?

假设您的架构是这样的(并假设条目按时间顺序排列):

CREATE TABLE log (
  id INT NOT NULL AUTO_INCREMENT,
  occurred_at DATETIME,
  event VARCHAR(255),
  PRIMARY KEY (id),
  INDEX (occurred_at)
);

像这样的东西:

SELECT 
  TIMEDIFF(after.occurred_at, before.occurred_at) AS time_gap,
  `before`.*, 
  `after`.*
FROM 
  log `before` JOIN 
  log `after` ON after.id = before.id+1 
ORDER BY time_gap DESC LIMIT 1;
于 2012-09-16T09:44:12.987 回答
0

为什么不直接处理排序后的事件列表,然后寻找每天最大的差距?

在排序列表中查找间隙是微不足道的。定义一些阈值,例如“最小 1 小时”和“与 12-6 间隔重叠”,然后您就有了完整的间隙检测。

顺便说一句,这不是真正的“数据挖掘”。- 这只是一个非常简单的数据查询。

于 2012-09-16T11:17:23.583 回答