首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >语句之间的SQL查询

语句之间的SQL查询
EN

Stack Overflow用户
提问于 2012-11-09 00:01:10
回答 3查看 120关注 0票数 1

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

代码语言:javascript
复制
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 ) 

我得到的结果只是第一天的结果,而不是周期。这个月。

我的声明有什么问题?

EN

回答 3

Stack Overflow用户

发布于 2012-11-09 00:19:59

您的查询会因为使用了一个称为隐藏列的(未命中的) MySQL特性而受到影响。查询为Record_id、Datalog_id和Time选择任意值,因为group by子句中没有提到这些值。

如果我推测预期的查询是:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-11-09 00:07:38

您需要使用相同的数据类型进行比较。因此,如果您的字段是date/time YYYY-MM-DD HH:MM:SS,那么您需要使用相同的格式执行BETWEEN。试着在你们约会的最后写上00:00:00。

票数 0
EN

Stack Overflow用户

发布于 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的,但是您将理解它的概念。您可以在那里看到如何按每天的小时进行分组。因为如果您只是按小时(时间)分组,您将获得整个月的特定小时的分组,而不是每天的分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13292715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档