Mysql 在联接中使用MAX函数
我在正确使用SQL时遇到了一些问题。iPad和statlog表之间存在一对多关系,我想选择值最高的statlog 我的第一个解决方案是包含一个嵌套的SELECT,它为我获取了最大值,但由于这花费了很多时间,我不得不重写它Mysql 在联接中使用MAX函数,mysql,sql,left-join,Mysql,Sql,Left Join,我在正确使用SQL时遇到了一些问题。iPad和statlog表之间存在一对多关系,我想选择值最高的statlog 我的第一个解决方案是包含一个嵌套的SELECT,它为我获取了最大值,但由于这花费了很多时间,我不得不重写它 SELECT ipad.udid, ipad.state, statelog.new_state FROM ipad LEFT OUTER JOIN statelog ON ipad.udid = statelog.udid WHER
SELECT
ipad.udid,
ipad.state,
statelog.new_state
FROM
ipad
LEFT OUTER JOIN
statelog
ON
ipad.udid = statelog.udid
WHERE
ipad.airid=250033
AND
statelog.new_state = MAX(statelog.new_state)
这个SQL不起作用,但它表明了我的意图。类似的东西会起作用
SELECT ipad.udid, ipad.state, max(statelog.new_state)
FROM ipad
LEFT OUTER JOIN statelog ON ipad.udid = statelog.udid
WHERE ipad.airid=250033
GROUP BY ipad.udid, ipad.state
MAX
和SQL中的其他聚合函数(min、sum、count、average等)处理一组值。
join为每个ipad的每个statelog生成一行,因此如果您有10台ipad,每个ipad有8个statelog,那么您将得到80行。
groupby
为每台ipad将这80行分组(它们的ipad.udid和ipad.state列相同),在该组的范围内,使用max(statelog.new\u state)
提取最大状态。您的查询是如何工作的,是否会抛出错误?max(statelog.new\u state)将获得最大值,而不是他所要求的特定id的最大值使用嵌套选择通常是实现这一点的方法,尽管由于您想要从statelog
中获得的唯一字段是new\u state
,SWeko的答案应该适用于您。由于OP不需要从statelog中获得任何其他内容,所以这个答案是正确的!谢谢这将我的查询时间从50秒更改为0.3秒。