Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 SQL小时数据_Mysql_Sql - Fatal编程技术网

Mysql SQL小时数据

Mysql SQL小时数据,mysql,sql,Mysql,Sql,下面的查询从MySql数据库检索天气数据,并将这些数据按小时格式分组 select hour(datetime) AS hour , avg(Temperature) as AVGT from Database.minute WHERE DATETIME BETWEEN (CURDATE() + INTERVAL (SELECT hour(NOW())) hour - INTERVAL 23 hour) AND ((CURDATE() + INTERVA

下面的查询从MySql数据库检索天气数据,并将这些数据按小时格式分组

select hour(datetime) AS hour
     , avg(Temperature) as AVGT 
from Database.minute
WHERE DATETIME
      BETWEEN (CURDATE() + INTERVAL (SELECT hour(NOW())) hour - INTERVAL 23 hour)
         AND ((CURDATE() + INTERVAL (SELECT hour(NOW())) hour))
group by hour
order by  (CURDATE() + INTERVAL (SELECT hour(NOW())) hour - INTERVAL 23 hour)
结果如下:

hour    AVGT
19     11.730
20     11.970
21     11.970
22     11.760
23     11.660
0      11.700
1      11.830
2      12.370
3      12.770
4      12.840
5      12.840
6      12.540
7      12.500
8      12.030
9      12.100
10     12.300
11     12.060
12     11.090
13     10.920
14     10.920
15     10.820
16     10.760
17     10.690
18     10.560
现在是18点15分。除“18”小时收集的数据外,上述所有输出均正确。它不是在18:00和18:15之间获取平均值,而是在18:00时输出平均值。即忽略18:01和18:14之间的数据

如何修改上述查询以包含当前小时(18:00到现在)的数据


谢谢你为什么不试试呢

SELECT Hour(datetime)   AS hour, 
       Avg(temperature) AS AVGT 
FROM   DATABASE.minute 
WHERE  datetime BETWEEN ( Curdate() + INTERVAL (SELECT Hour(Now())) hour - 
                          INTERVAL 23 hour ) AND Now() 
GROUP  BY hour 
ORDER  BY ( Curdate() + INTERVAL (SELECT Hour(Now())) hour - INTERVAL 23 hour ) 
我同意(您的filter citerion不应过滤当前时间的记录,而应过滤当前时间的记录),但是您的日期/时间操作非常奇怪:

  • 您不需要子查询
    (选择Hour(NOW())
    来获取
    Hour(NOW())

  • 您可以更简单地表示
    (Curdate()+INTERVAL(选择Hour(NOW()))Hour-INTERVAL 23 Hour)

    CURDATE() + INTERVAL HOUR(NOW()) - 23 HOUR
    
    或者,在我看来,更清楚地说:

    DATE_FORMAT(NOW() - INTERVAL 23 HOUR, '%Y-%m-%d %H:00:00')
    
  • 您的
    orderby
    子句是一个常量,因此没有实现任何功能:您的意思是按
    hour
    订购吗

  • 因此:

    SELECT   HOUR(datetime) AS hour,
             AVG(Temperature) AS AVGT
    FROM     Database.minute
    WHERE    datetime BETWEEN
                   DATE_FORMAT(NOW() - INTERVAL 23 HOUR, '%Y-%m-%d %H:00:00')
               AND NOW()
    GROUP BY hour
    ORDER BY hour
    

    我总是有这样的小问题时,使用之间。。。如果是我,我会使用WHERE
    'time'='y'
    格式请同时总结差异和原因。非常感谢Ankur!非常感谢。完全同意,更好的方式。谢谢你们。鉴于eggyal回答的详细答案和理由,以及他的建议,我将把这标记为我接受的答案。干杯