gpt4 book ai didi

mysql - 我对 SQL MAX() 有什么不了解的地方?

转载 作者:可可西里 更新时间:2023-11-01 08:00:30 27 4
gpt4 key购买 nike

数据:(log_time是DATETIME类型)

log_id  | action      | log_time            | user
--------------------------------------------------
1 Processed 2011-02-28 16:38:48 1
2 Processed 2011-03-02 16:56:43 5
3 Processed 2011-03-02 17:00:17 5
4 Processed 2011-03-03 08:59:33 5

查询:

SELECT log_time, user 
FROM logs
WHERE action = "Processed"
GROUP BY action
HAVING MAX(log_time)

结果:

log_time            | user
--------------------------
2011-02-28 16:38:48 1

显然,这根本没有最大 log_time。如果我将查询更改为...

SELECT MAX(log_time), user 
FROM logs
WHERE action = "Processed"

然后我自然而然地得到:

log_time            | user
--------------------------
2011-03-03 08:59:33 1

现在,我显然想要的数据是第 4 行中的数据:3 月 3 日,但是用户 5。我知道我可以通过执行一个简单的 SELECT ... ORDER BY log_time DESC LIMIT 1。但我的问题是,我对这些不正确的 MAX() 查询做了什么?在我看来,如果我使用 HAVING MAX() 运行查询,它会为我提供具有最大值的行。我对 MAX() 的工作原理有什么不理解的地方?

编辑:为了详细说明我的问题,基本上,当我看到查询时......

SELECT * FROM logs WHERE action = "Processed"
GROUP BY action HAVING MAX(log_time)

...我的假设是,根据代码的显示方式,它将检索具有处理操作的最大 log_time 的。这似乎是一个错误的假设。那么,HAVING MAX() 究竟意味着什么?

最佳答案

您需要为聚合函数包含一个 GROUP BY 子句。

SELECT MAX(log_time), user 
FROM logs
WHERE action = "Processed"
GROUP BY user

或者,如果您要查找单个值,则根本不包括用户:

SELECT MAX(log_time)
FROM logs
WHERE action = "Processed"

最后,如果您希望用户与单个最大值相关联,请使用子查询

SELECT l.user, l.log_time
FROM logs l
INNER JOIN (SELECT MAX(log_time) as max_time
FROM logs
WHERE action = "Processed") q
ON l.log_time = q.max_time
AND l.action = "Processed"

关于mysql - 我对 SQL MAX() 有什么不了解的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5182736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com