Php 查找数据库中没有数据的最大时间跨度

Php 查找数据库中没有数据的最大时间跨度,php,mysql,algorithm,information-retrieval,Php,Mysql,Algorithm,Information Retrieval,我有一个包含事件的数据库。每个事件都有一个时间戳。这些事件在白天均匀分布,但每晚都有一个没有数据的时间跨度。我的问题是夜晚没有很好的定义。可以是晚上23点到第二天早上7点,也可以是当天凌晨2点到10点,甚至只能是当天晚上8点到23点 现在我想计算事件的间隔,但是没有大的时间跨度,没有事件。但我不知道如何找到这个时间跨度。我的问题是,可能有几天没有时间跨度,或者有两天时间跨度相同(例如,第一天晚上8点到午夜,第二天午夜到早上7点) 我现在的问题是:如何找到这个时间跨度 我更喜欢只使用MySql的解

我有一个包含事件的数据库。每个事件都有一个时间戳。这些事件在白天均匀分布,但每晚都有一个没有数据的时间跨度。我的问题是夜晚没有很好的定义。可以是晚上23点到第二天早上7点,也可以是当天凌晨2点到10点,甚至只能是当天晚上8点到23点

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

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


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

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

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

大概是这样的:

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小时”和“与12-6间隔重叠”,然后就可以完成间隙检测


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

如何找到一天中没有事件的最大时间跨度,然后将所有“空洞”(事件之间的时间)与之进行比较?只要它们小于或等于,那么这就是同一天。如果更大-新的一天已经开始?这方面的问题是:一天中可能会有一个相关的洞,一个在早上,一个在晚上,它们必须与前一天/第二天一起添加。我甚至不知道怎样才能把洞挖出来;-)只是一个粗略的想法,只需选择n和n-1的时间戳,并获得时间戳的差异。然后根据这个差异进行排序。应该会给你想要的结果。我所说的“空洞”是指:
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;