【发布时间】:2020-02-06 16:38:42
【问题描述】:
我有一个名为“counter”的表,它有 3 个字段:
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| record | datetime | YES | | NULL | |
| passed | tinyint(1) | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
我存储的数据是这样的
mysql> SELECT record, passed FROM counter;
+---------------------+--------+
| record | passed |
+---------------------+--------+
| 2019-09-19 00:00:00 | 1 |
我想做的是查询特定日期的结果。
我使用了那个查询:
SELECT DATE_FORMAT(record, '%d-%m-%Y %H') AS ts,
COUNT(*) AS passed
FROM counter
GROUP BY ts
HAVING ts = 09;
问题是如果数据库中有几个月,它会返回每个月的第 09 天。
+---------------+--------+
| ts | passed |
+---------------+--------+
| 09-10-2019 10 | 593 |
| 09-10-2019 11 | 667 |
| 09-10-2019 12 | 367 |
| 09-10-2019 13 | 35 |
+---------------+--------+
我想得到一个确切的日期,我试着输入确切的日期
SELECT DATE_FORMAT(record, '%d-%m-%Y %H') AS ts,
COUNT(*) AS passed
FROM counter
WHERE 09-10-2019;
但我得到一个错误
错误 1140 (42000):在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #1 包含非聚合列“iot.counter.record”;这与 sql_mode=only_full_group_by 不兼容
我该如何解决这个问题?
【问题讨论】:
-
标题与您发布的代码不一致。您想按天分组还是按天 + 小时分组?
标签: mysql sql group-by aggregate-functions