找到没有数据库中数据的最大Timespan

时间:2012-09-16 09:20:02

标签: php mysql algorithm information-retrieval

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

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

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

为什么不直接处理已排序事件列表,并查找每天内最大的差距?

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

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