Mysql GROUP BY 查询。按日期和时间显示数据

标签 mysql sql group-by

我有一个名为“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/

相关文章:

php - 在 mysql、php 中更新查询的错误消息

mysql - SQL查询示例

sql - PSQL 在同一行上按多个条件分组

PHP Mysql获取时间范围之间的差距

PHP时间间隔至少十天

php - 自动关闭php与mysql的连接

php - 这 3 个查询可以合并为一个 MySQL 查询吗?

sql - 尝试通过涉及 CASES 和聚合函数的别名进行搜索的 mysql 查询

C API 上的 mongodb 分组

sql - 选择列值,其中其他列为组的最大值