Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在联接中使用MAX函数_Mysql_Sql_Left Join - Fatal编程技术网

Mysql 在联接中使用MAX函数

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

我在正确使用SQL时遇到了一些问题。iPad和statlog表之间存在一对多关系,我想选择值最高的statlog

我的第一个解决方案是包含一个嵌套的SELECT,它为我获取了最大值,但由于这花费了很多时间,我不得不重写它

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秒。