我在使用mySQL和我的PHP管理员时遇到了问题,查询我的数据库时也遇到了问题,这是查询语句:
SELECT Record_ID, Datalog_ID, TIME, AVG( Value )
FROM `Datalog_Values`
WHERE Datalog_ID = '241'
AND TIME
BETWEEN '2012-06-01'
AND '2012-06-30'
GROUP BY HOUR( TIME ) 我得到的结果只是第一天的结果,而不是周期。这个月。
我的声明有什么问题?
发布于 2012-11-09 00:19:59
您的查询会因为使用了一个称为隐藏列的(未命中的) MySQL特性而受到影响。查询为Record_id、Datalog_id和Time选择任意值,因为group by子句中没有提到这些值。
如果我推测预期的查询是:
SELECT Record_ID, Datalog_ID, hour(TIME), AVG( Value )
FROM `Datalog_Values`
WHERE Datalog_ID = '241' AND TIME BETWEEN '2012-06-01' AND '2012-06-30'
GROUP BY Record_id, Datalog_id, hour(TimE ) 然后,假设查询的目标是为给定DataLog_id的每个Record_Id和一天中的某一小时生成结果,这就开始有意义了。您想要一天中的每个小时的结果还是一个月的每个小时的结果?
如果您提供示例数据并解释您想要的输出,那么您的问题可以得到更好的回答。
发布于 2012-11-09 00:07:38
您需要使用相同的数据类型进行比较。因此,如果您的字段是date/time YYYY-MM-DD HH:MM:SS,那么您需要使用相同的格式执行BETWEEN。试着在你们约会的最后写上00:00:00。
发布于 2012-11-09 00:09:10
如果您的时间列具有您在where条件中给出的格式('YYYY-MM-DD'),那么Group By HOUR ( Time )就没有意义了。尝试按时间分组或按月分组(时间)
否则,你会以错误的方式获取where条件,并且需要在每个条件的末尾添加hh:mm:ss。
如果你想要一个小时平均值,那么确保你的时间列的数据类型是日期/时间,这意味着它的格式是('yyyy/MM/dd hh:mm:ss')
如果你有这样的格式,那么我认为这个问答将会对你有所帮助:SQL Server Group by Count of DateTime Per Hour?
当然,它是针对SQL Sever的,但是您将理解它的概念。您可以在那里看到如何按每天的小时进行分组。因为如果您只是按小时(时间)分组,您将获得整个月的特定小时的分组,而不是每天的分组。
https://stackoverflow.com/questions/13292715
复制相似问题