我试图从每天应该包含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而言,这已经是我的目标了。
任何帮助都非常感激。
答案 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 =保存虚拟数据的表 - 即所有小时