Bur*_*bas 2 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)
Run Code Online (Sandbox Code Playgroud)
这个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
Run Code Online (Sandbox Code Playgroud)
MAXSQL中的其他聚合函数(min,sum,count,average等)适用于值组.对于每个ipad,连接为每个状态日志生成一行,因此如果你有10个ipads,每个有8个状态日志,你将获得80行.的Group by每一个的ipad基团的那些80行(其ipad.udid和ipad.state列是相同的),并且在该组的范围使用max(statelog.new_state),以提取最大状态.