1

我在我的 PHP 管理员中使用 mySQL 时遇到问题,并且在查询我的数据库时遇到问题这是查询语句:

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 ) 

我得到的结果只是第一天的结果,而不是期间的结果。即月份。

我的说法有什么问题????

4

3 回答 3

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 ) 

然后这开始有意义,假设查询的目标是为每个 Record_Id 和给定 DataLog_id 的一天中的小时生成结果。您想要一天中的每个小时还是每个月的每个小时的结果?

如果您提供示例数据并解释您想要的输出,那么您的问题可以得到更好的回答。

于 2012-11-08T16:19:58.577 回答
0

您需要使用相同的数据类型进行比较。因此,如果您的字段是日期/时间 YYYY-MM-DD HH:MM:SS 那么您需要BETWEEN使用相同的格式。尝试将 00:00:00 放在两个日期的末尾。

于 2012-11-08T16:07:37.870 回答
0

如果您的时间列具有您在 where 条件('YYYY-MM-DD')中给出的格式,那么按小时(时间)分组没有意义。尝试进行 GROUP BY TIME 或 GROUP BY MONTH (TIME)

否则你的 where 条件错误,你需要在每个条件的末尾添加 hh:mm:ss 。

如果您想要每小时平均值,请确保您的时间列的数据类型是日期/时间,这意味着它的格式是 ('yyyy/MM/dd hh:mm:ss')

如果您有这种格式,那么我认为这个 SO 问题 - 答案会帮助您: SQL Server Group by Count of DateTime Per Hour?

当然它适用于 SQL Sever,但你会明白这个概念。您可以在那里查看如何按每天的时间分组。因为如果您只是按小时(时间)分组,您将获得整个月的特定时间的分组,而不是每天单独分组。

于 2012-11-08T16:09:09.863 回答