在连接中使用MAX函数

时间:2011-09-13 11:40:26

标签: mysql sql left-join

我在使用这个SQL时遇到了一些麻烦。 iPad和statlog表之间存在一对多的关系,我想选择具有最高价值的statlog。

我的第一个解决方案是包含一个嵌套的SELECT,它为我抓住了MAX值,但由于这需要很多时间,我不得不重写它。

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不起作用,但它显示了我的意图。

1 个答案:

答案 0 :(得分:6)

这样的东西会起作用

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
SQL中的

MAX和其他聚合函数(min,sum,count,average等)可以处理值组。 对于每个ipad,连接为每个状态日志生成一行,因此如果你有10个ipads,每个有8个状态日志,你将获得80行。 Group by为每个ipad划分了那80行(他们的ipad.udid和ipad.state列是相同的),并且在该组的范围内使用max(statelog.new_state)来提取最大状态。