我在使用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 )
我得到的结果只是第一天而不是第一天的结果。这个月。
我的陈述有什么问题????
答案 0 :(得分:1)
您的查询遭受使用称为隐藏列的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和一天中的小时的结果。您想要一天中的每个小时或每个月的每个小时的结果吗?
如果您提供样本数据并解释所需的输出,那么您的问题可以得到更好的解答。
答案 1 :(得分:0)
您需要使用相同的数据类型进行比较。因此,如果您的字段是日期/时间YYYY-MM-DD HH:MM:SS,那么您需要使用相同的格式BETWEEN
。尝试在两个日期结束时将00:00:00放置。
答案 2 :(得分:0)
如果您的时间列具有您在哪里提供的格式('YYYY-MM-DD') 然后小组按小时(时间)没有意义。 尝试按时间进行分组 要么 按月分组(时间)
否则你的条件错误,你需要在每个条件的末尾添加hh:mm:ss。
如果您想要每小时平均值,请确保您的时间列的数据类型是日期/时间 这意味着它的格式是('yyyy / MM / dd hh:mm:ss')
如果你有这种格式,那么我认为这个问题 - 答案会帮助你: SQL Server Group by Count of DateTime Per Hour?
当然它适用于SQL Sever,但你会得到这个概念。 您可以在那里看到如何按小时分组。因为如果您只按小时(时间)分组,您将获得整个月的特定小时的分组,而不是每天分组。