我有一个名为“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 | |
+--------+------------+------+-----+---------+----------------+
我存储在记录中的数据是这样的(传递的是 bool 值):
mysql> SELECT record, passed FROM counter;
+---------------------+--------+
| record | passed |
+---------------------+--------+
| 2019-09-19 00:00:00 | 1 |
我想要做的是一个查询,它总结了传递字段有多少次按小时和日期分组的1。 例如:
Hour | Date | passed
13:00 2019-09-19 10
执行:
SELECT HOUR (record), COUNT(*) as passed FROM counter GROUP BY HOUR(record);
我得到了这些结果
| HOUR (record) | passed |
+---------------+--------+
| 0 | 67 |
| 13 | 199 |
+---------------+--------+
问题是13:00以后还有记录,根本没有播种。
另外为了获得我尝试过的日期:
SELECT DAY(record), COUNT(*), HOUR(record), COUNT(*) as passed FROM counter GROUP BY HOUR(record);
我收到此错误
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'iot.counter.record' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
如何归档想要的结果?
最佳答案
如果您不介意使用单个字段来表示日期和时间,则可以在此处使用 DATE_FORMAT
:
SELECT
DATE_FORMAT(record, '%Y-%m-%d %H') AS ts,
COUNT(*) AS passed
FROM counter
GROUP BY
DATE_FORMAT(record, '%Y-%m-%d %H');
关于Mysql GROUP BY 查询。按日期和时间显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029276/