【发布时间】:2018-01-08 06:47:00
【问题描述】:
我有一个包含这些列的大型 MySql 表:
id int(10) unsigned Auto Increment
pr_id int(10) unsigned
temp_air varchar(255) NULL
created_at timestamp NULL
updated_at timestamp NULL
我想获取 24 小时前数据的行,并从该选择数据中获取每小时的数据。
我试过的查询是:
SELECT *
FROM `statistics`
WHERE DATE(created_at) = CURDATE()- INTERVAL 1 DAY
GROUP BY
EXTRACT(HOUR FROM created_at)
ORDER BY
EXTRACT(HOUR FROM created_at)
并且出现错误:
查询错误 (1055):SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列 'statistic.statistics.id' 它在功能上不依赖于 GROUP BY 子句中的列; 这与 sql_mode=only_full_group_by 不兼容
我必须如何更改我的查询?我的错误在哪里?
【问题讨论】:
-
group by 子句是将数据汇总成组,而不是按小时显示您的数据。后者需要分页,而不是分组。
-
Extract 是一个 oracle 函数而不是 mysql 您要转换为 mysql 吗?
-
@P.Salmon 了解 MySQL 函数
EXTRACT()。 -
请不要标记无关的产品。 Microsoft SQL Server 与 MySQL 无关。