Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-查找丢失的数据_Mysql - Fatal编程技术网

MySQL-查找丢失的数据

MySQL-查找丢失的数据,mysql,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:0

我试图从一个每天应该包含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;
选择t1.datetime作为'from',t2.datetime作为'to'`
从test.table中选择t1
将test.table连接为t2
在t1.datetimet1.datetime上
t3.datetimeDATE\u ADD(t1.datetime,间隔60分钟)
按t1.datetime排序;
但这是谷歌能让我做到的


非常感谢您的帮助。

您需要创建一个包含所有小时数的临时表,然后将临时表和包含真实数据的表连接起来

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=保存虚拟数据的表格-即所有小时


虽然有一些黑客攻击,但通常数据库不能返回它不拥有的数据。相反,它必须被推断出来。通常,此类扣减在应用程序级别进行管理。