Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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中查询最近7天特定小时的数据_Mysql - Fatal编程技术网

在MYSQL中查询最近7天特定小时的数据

在MYSQL中查询最近7天特定小时的数据,mysql,Mysql,我有一个名为startTime的字段,其类型为DATETIME。我每小时有一些数据(每小时1行)。我想获取特定时间的最后7天(例如:01:00:00)。所以基本上,查询应该只返回7行 我如何在MySQL中做到这一点 select traffic from incomingTraffic WHERE ... 样本数据: +---------------------+---------------------+-----------+----------+ | startTime

我有一个名为
startTime
的字段,其类型为
DATETIME
。我每小时有一些数据(每小时1行)。我想获取特定时间的最后7天(例如:
01:00:00
)。所以基本上,查询应该只返回7行

我如何在MySQL中做到这一点

select traffic from incomingTraffic WHERE ...
样本数据:

+---------------------+---------------------+-----------+----------+
| startTime           | endTime             | component | traffic  |
+---------------------+---------------------+-----------+----------+
| 2015-05-01 00:00:00 | 2015-05-01 01:00:00 | rest      | 29090345 |
| 2015-05-01 01:00:00 | 2015-05-01 02:00:00 | rest      | 32224087 |
| 2015-05-01 02:00:00 | 2015-05-01 03:00:00 | rest      | 35165799 |
| 2015-05-01 03:00:00 | 2015-05-01 04:00:00 | rest      | 36903464 |
| 2015-05-01 04:00:00 | 2015-05-01 05:00:00 | rest      | 40394130 |
| 2015-05-01 05:00:00 | 2015-05-01 06:00:00 | rest      | 44874862 |
| 2015-05-01 06:00:00 | 2015-05-01 07:00:00 | rest      | 49988600 |
| 2015-05-01 07:00:00 | 2015-05-01 08:00:00 | rest      | 52240544 |
| 2015-05-01 08:00:00 | 2015-05-01 09:00:00 | rest      | 54517705 |
| 2015-05-01 09:00:00 | 2015-05-01 10:00:00 | rest      | 55277967 |
| 2015-05-01 10:00:00 | 2015-05-01 11:00:00 | rest      | 55285309 |
| 2015-05-01 11:00:00 | 2015-05-01 12:00:00 | rest      | 55572614 |
| 2015-05-01 12:00:00 | 2015-05-01 13:00:00 | rest      | 54507826 |
| 2015-05-01 13:00:00 | 2015-05-01 14:00:00 | rest      | 52430349 |
| 2015-05-01 14:00:00 | 2015-05-01 15:00:00 | rest      | 47084995 |
| 2015-05-01 15:00:00 | 2015-05-01 16:00:00 | rest      | 41671868 |
| 2015-05-01 16:00:00 | 2015-05-01 17:00:00 | rest      | 37492018 |
| 2015-05-01 17:00:00 | 2015-05-01 18:00:00 | rest      | 34391610 |
| 2015-05-01 18:00:00 | 2015-05-01 19:00:00 | rest      | 33814871 |
| 2015-05-01 19:00:00 | 2015-05-01 20:00:00 | rest      | 32466192 |
| 2015-05-01 20:00:00 | 2015-05-01 21:00:00 | rest      | 28703534 |
| 2015-05-01 21:00:00 | 2015-05-01 22:00:00 | rest      | 25564237 |
| 2015-05-01 22:00:00 | 2015-05-01 23:00:00 | rest      | 23209539 |
| 2015-05-01 23:00:00 | 2015-05-02 00:00:00 | rest      | 24853381 |
| 2015-05-02 00:00:00 | 2015-05-02 01:00:00 | rest      |    24090 |
| 2015-05-02 00:00:00 | 2015-05-02 01:00:00 | rest      | 26848485 |
| 2015-05-02 01:00:00 | 2015-05-02 02:00:00 | rest      | 28507177 |
| 2015-05-02 02:00:00 | 2015-05-02 03:00:00 | rest      | 29970856 |
| 2015-05-02 03:00:00 | 2015-05-02 04:00:00 | rest      | 30607213 |
| 2015-05-02 04:00:00 | 2015-05-02 05:00:00 | rest      | 34005454 |
| 2015-05-02 05:00:00 | 2015-05-02 06:00:00 | rest      | 38241748 |
| 2015-05-02 06:00:00 | 2015-05-02 07:00:00 | rest      | 42154837 |
| 2015-05-02 07:00:00 | 2015-05-02 08:00:00 | rest      | 44181502 |
| 2015-05-02 08:00:00 | 2015-05-02 09:00:00 | rest      | 45787319 |
| 2015-05-02 09:00:00 | 2015-05-02 10:00:00 | rest      | 47283634 |
| 2015-05-02 10:00:00 | 2015-05-02 11:00:00 | rest      | 47328065 |
| 2015-05-02 11:00:00 | 2015-05-02 12:00:00 | rest      | 47370131 |
| 2015-05-02 12:00:00 | 2015-05-02 13:00:00 | rest      | 46298305 |
| 2015-05-02 13:00:00 | 2015-05-02 14:00:00 | rest      | 43894081 |
| 2015-05-02 14:00:00 | 2015-05-02 15:00:00 | rest      | 40307217 |
| 2015-05-02 15:00:00 | 2015-05-02 16:00:00 | rest      | 35481808 |
| 2015-05-02 16:00:00 | 2015-05-02 17:00:00 | rest      | 32316694 |
| 2015-05-02 17:00:00 | 2015-05-02 18:00:00 | rest      | 30426755 |
| 2015-05-02 18:00:00 | 2015-05-02 19:00:00 | rest      | 29809260 |
| 2015-05-02 19:00:00 | 2015-05-02 20:00:00 | rest      | 28466543 |
| 2015-05-02 20:00:00 | 2015-05-02 21:00:00 | rest      | 25392149 |
| 2015-05-02 21:00:00 | 2015-05-02 22:00:00 | rest      | 21182582 |
| 2015-05-02 22:00:00 | 2015-05-02 23:00:00 | rest      | 20954845 |

除了数据应小于7天的条件外,还应添加
hour()=1的条件


很抱歉,我花了一些时间收集其他碎片并将其正确处理;-)

您可以使用a获得7天,并将小时与匹配,这将为您提供日期的小时部分

SELECT startTime, traffic FROM incomingTraffic 
WHERE
  startTime > DATE_SUB('2015-05-01', INTERVAL 7 DAY) 
  AND HOUR(startTime) = 1;

请注意,我没有
NOW()
,因为您的示例数据是过去的。还要注意的是,您应该首先检查日期范围,然后进行小时比较,因为这要便宜得多,因为mysql需要进行转换来检查小时。

这个问题比看起来更棘手,因为它取决于数据更新的方式以及OP所说的“最后7天”的真正含义

如果要查看相对于当前日期的最后7天,请使用:

WHERE hour(startTime) = 7 AND
      startTime >= date_sub(CURDATE(), interval 7 day)
现在,这可能需要7天或8天,具体取决于数据的更新方式和当前时间。您可以按startTime DESC LIMIT 7添加
订单,以获得整整7天

如果要在表中列出最近7天的时间,请尝试以下方法:

SELECT traffic
FROM incomingTraffic
WHERE hour(startTime) = 7
ORDER BY startTime DESC
LIMIT 7;

这将获得数据中最近的7天。然而,如果您有一个大的表,这可能是低效的。在
startTime
上有一个
WHERE
子句将使查询更有效。

从小时(startTime)=1和startTime=DATE_SUB(startTime,INTERVAL 7 DAY)的incomingTraffic中选择*无可否认,这不是最全面、最优雅的解决方案——Gordon理所当然地在这里获奖,既然他考虑到了所有可能发生的事情,那为什么要投否决票呢?
SELECT traffic
FROM incomingTraffic
WHERE hour(startTime) = 7
ORDER BY startTime DESC
LIMIT 7;