2014-03-13 35 views
3

我有myTabletimestampthe_dates(它是一个unique索引),每个值应该用5分钟分隔。查找mysql日期时间序列中的空白

例如:

the_dates 
2014-03-13 17:30:00 
2014-03-13 17:35:00 
2014-03-13 17:40:00 
2014-03-13 17:45:00 

有没有一种方法,使用MySQL,检测 “失踪” 行?例如,如果下一个值是:

2014-03-13 17:55:00 

然后myTable将被丢失:

2014-03-13 17:50:00 

__

我想使用UNIX_TIMESTAMP和检测间隙大于300秒,可能使用一些这个表本身就是INNER JOINjoin,但是我太过分了。

任何想法?

回答

3

你可以试试这个。每个记录返回的时间范围应超过5分钟。对于你的例子,它应该已经返回2014-03-13 17:45:00 , 2014-03-13 17:55:00

SELECT t1.the_dates AS `from`, t2.the_dates AS `to` 
FROM mytable AS t1 
JOIN mytable AS t2 
    ON t1.the_dates < t2.the_dates 
LEFT JOIN mytable AS t3 
    ON t3.the_dates > t1.the_dates 
    AND t3.the_dates < t2.the_dates 
WHERE t3.the_dates IS NULL 
    AND t2.the_dates > DATE_ADD(t1.the_dates, INTERVAL 5 MINUTE) 
ORDER BY t1.the_dates; 
+0

谢谢我会玩弄这个并报告回来。我可能最终不得不将其拉入一些服务器端脚本来填补空白,无论 – themerlinproject

+0

因此,这工作。但它非常昂贵。在一排650行的桌子上玩了21秒。我使用的是1天的时间间隔。不知何故,这可能会更快吗? –

+0

@PatrickBassut - 日期字段中是否有索引?该解决方案相对通用。你可以个性化实施吗?例如,LEFT JOIN确保T2记录的目的是“下一个”记录。你能更有效地加入到后续行吗? – AgRizzo

相关问题