MySQL - 查找丢失的数据

时间:2015-06-01 17:38:04

标签: mysql

我试图从每天应该包含24行数据(每小时一行)的表中列出每次丢失数据。从以下示例中:

Datetime
2015-05-01 00:00:00
2015-05-01 01:00:00
2015-05-01 02:00:00
2015-05-01 03:00:00
2015-05-01 07:00:00
2015-05-01 08:00:00
2015-05-01 09:00:00
...

我想回复:

Datetime
2015-05-01 04:00:00
2015-05-01 05:00:00
2015-05-01 06:00:00

我可以返回丢失数据的第一个小时和最后一小时,如下所示:

SELECT t1.datetime AS `from`, t2.datetime AS `to`
FROM test.table AS t1
JOIN test.table AS t2
  ON t1.datetime < t2.datetime
LEFT JOIN test.table AS t3
  ON t3.datetime > t1.datetime
   AND t3.datetime < t2.datetime
WHERE t3.datetime IS NULL
  AND t2.datetime > DATE_ADD(t1.datetime, INTERVAL 60 MINUTE)
ORDER BY t1.datetime;

但就Google而言,这已经是我的目标了。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

您需要创建一个包含所有小时数的临时表,然后加入临时表和包含实际数据的表。

SELECT temp_table.datetime AS MissingDT
FROM temp_table
LEFT JOIN data_table ON temp_table.datetime = data_table.datetime
WHERE data_table.datetime IS NULL;
  

DATA_TABLE =保存实际数据的表

     

TEMP_TABLE =保存虚拟数据的表 - 即所有小时