MySQL - 在一列上使用 MAX() 并从该行的其余部分返回数据?

标签 mysql select group-by max

我不确定这是一个复杂的问题还是我只是错过了一些琐碎的事情,但我不太明白这一点。

我有一个表格,列出了错误消息及其出现时间:

id     created_at          content
1      2017-08-05 08:00    ...
2      2017-08-15 16:00    ...
3      2017-08-15 16:01    ...
4      2017-08-15 16:02    ...
5      2017-08-25 16:00    ...

我根据日期和时间将这些行分组在一起,并计算出现的错误数量:

SELECT DATE_FORMAT(created_at, '%d.%m. %h'), 
       COUNT(*) AS errorCount 
       FROM db.errorData 
       GROUP BY DAY(created_at), HOUR(created_at);

结果是:

created_at          errorCount
2017-08-05 08       1
2017-08-15 16       3
2017-08-25 16       1

现在我想使用 MAX() 来获取最高的错误计数。我用子选择来做到这一点:

SELECT MAX(errorCount) AS errorMax 
       FROM(
         SELECT DATE_FORMAT(created_at, '%d.%m. %h'), 
         COUNT(*) AS errorCount 
         FROM db.errorData 
         GROUP BY DAY(created_at), HOUR(created_at)
       ) alias;

但是,我还想获取错误最多的日期。简单地将 created_at 添加到第一个 SELECT 是行不通的,因为它只返回第一行的值。

我现在不知道如何进行这项工作。你能帮帮我吗?

最佳答案

添加 ORDER BY 子句和 LIMIT 记录数将获取您想要的结果。

SELECT DATE_FORMAT(created_at, '%d.%m. %h') AS created_at, 
       COUNT(*) AS errorCount 
  FROM db.errorData 
 GROUP BY DAY(created_at), HOUR(created_at)
 ORDER BY errorCount DESC, created_at ASC
 LIMIT 1;

如果有很多天的 errorCount 相同,您必须决定选择特定的一天。

我的上述解决方案只是选择错误最大的最早的一天。

关于MySQL - 在一列上使用 MAX() 并从该行的其余部分返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45857695/

相关文章:

java - 为 Jpa 存储库设置 sql_mode=(SELECT REPLACE(@@sql_mode ,'ONLY_FULL_GROUP_BY' ,'' ))

mysql - 为什么 MySQL 与 SQLServer 的工作方式不同,允许使用 GROUP BY 子句的多列

mysql - 给定日期范围内的每日活跃用户数

mysql - 如果我不希望守护进程自动加载和/或启动,launchd 文件应该如何设置?

c++ - 何时调用 mysql_free_result (Resuing mysql_store_result, MYSQL_RES)

php - 意外的 T_ENCAPSED_AND_WHITESPACE,预期 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 错误

Java数组子串

c++ - 当端口上有字符时,select() 调用不返回

mysql - 使用sql查找源和最终目的地

mysql - 在 SQL 中将所有内容分组到一个元组中