我myTable
timestamp
列the_dates
(unique
索引),每个值应该分开五分钟。
例如:
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 JOIN
到join
表格本身,但我太过分了一个新手可以单独解决这个问题。
有什么想法吗?
答案 0 :(得分: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;
答案 1 :(得分:0)
回到同一问题,我在大型数据集上测试了建议的解决方案,这太浪费时间了。 我尝试通过将请求嵌入到同一张表但在下一个可用时间嵌入另一种方法:
SELECT
t.id,
t.`timestamp`,
(
SELECT UNIX_TIMESTAMP(t1.`timestamp`)-UNIX_TIMESTAMP(t.`timestamp`)
FROM mytable AS t1
WHERE t1.timestamp>t.timestamp
ORDER BY t1.timestamp ASC LIMIT 1
) AS difftime
FROM
`mytable ` AS t
HAVING difftime > 300
ORDER BY t.`timestamp` ASC
在一张约有120万条记录的表上,对3500个特定项进行过滤后,查询花费了3.5秒