我在使用这个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不起作用,但它显示了我的意图。
答案 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)
来提取最大状态。