Mysql SQL小时数据
下面的查询从MySql数据库检索天气数据,并将这些数据按小时格式分组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
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回答的详细答案和理由,以及他的建议,我将把这标记为我接受的答案。干杯