我有一个名为“ 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
不兼容我该如何解决这个问题?
我有一个名为“ counter”的表,该表具有3个字段:领域类型空|关键默认值|额外| + -------- + ------------ + ------ + ----- + --------- + ---- ------------ + | id | int(11)...
问题是您在日期格式中包括了小时,这意味着每天最多有24个子组...每天的每个小时都有一个子组。删除%H
并修复WHERE
子句:
如果您只想获取当前日期第9小时的数据,则实际上并不需要考虑整天的数据,然后进行汇总并使用Haves子句进行筛选。由于增加了数据树查找以及增加了临时表的大小(最终将其丢弃),因此不必要地降低了效率。