我不确定这是一个复杂的问题还是我只是错过了一些琐碎的事情,但我不太明白这一点。
我有一个表格,列出了错误消息及其出现时间:
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/