2015-06-01 45 views
2

我試圖列出每一天應該包含24行數據(每小時一個數據)的表中缺失數據的每一個出現。從下面的例子:MySQL - 查找丟失的數據

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; 

但這隻要谷歌能夠幫到我。

任何幫助真的很感激。

+3

雖然有一些黑客,一般數據庫不能返回它的數據不具備。相反,它必須被推斷出來。通常,這種扣減是在應用程序級別進行管理的。 – Strawberry

回答

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 =表保存虛擬數據 - 即所有的時間