Mysql 根据结果组的最大结果更新所有字段

Mysql 根据结果组的最大结果更新所有字段,mysql,max,dateadd,Mysql,Max,Dateadd,我有一桌葡萄片。每个补丁都有一个喷雾表,其中有一个日期和喷雾类型,每个喷雾类型表都有一个“最短时间”,直到您可以选择为止 修补程序表: PatchID | earliestDate 1 --- 2 --- 喷雾台 SprayID | PatchID | TypeID |Date 1 1 1 2019-06-1 2 1 2 2019-06-16 1 2

我有一桌葡萄片。每个补丁都有一个喷雾表,其中有一个日期和喷雾类型,每个喷雾类型表都有一个“最短时间”,直到您可以选择为止

修补程序表:

PatchID | earliestDate
1         ---
2         ---
喷雾台

SprayID | PatchID | TypeID  |Date
1         1         1        2019-06-1
2         1         2        2019-06-16
1         2         1        2019-06-16
2         2         2        2019-06-1
喷雾式

TypeID | minimumTime
1        14
2        28
我已经抓到了那本书

MAX(newEarliest) FROM ( SELECT DATE_ADD(Spray.Date, INTERVAL Type.minimumTime DAY) As newEarliest
FROM Spray
LEFT JOIN Patch ON Patch.PatchID = Spray.PatchID
LEFT JOIN Type ON Type.TypeID = Spray.TypeID) WHERE Patch.PatchID = 1; 
但从这里我被困住了

UPDATE Patch SET EarliestDate = MAX(newEarliest) FROM ( SELECT DATE_ADD(Spray.Date, INTERVAL Type.minimumTime DAY) As newEarliest
FROM Spray
LEFT JOIN Patch ON Patch.PatchID = Spray.PatchID
LEFT JOIN Type ON Type.TypeID = Spray.TypeID) ) WHERE ??;

预期结果应该是,补丁1将于7月14日发布,补丁2将于7月30日发布。。但我不能做最后的连接。我希望/期待着?我刚碰到一堵墙,需要休息一下,但可能有一个SQL命令我错过了?

试试这个查询。在执行更新之前,您可以先作为
子查询
获取
max()
分组依据
补丁ID

update Patch p    
Inner join (
    select t1.PatchID, max(date_add(t1.Date, interval t3.minimumTime day)) as newEarliest
    from Spray t1
    left join Patch t2 on t2.PatchID = t1.PatchID
    left join Type t3 on t3.TypeID = t1.TypeID
    group by t1.PatchID) t on t.PatchID = p.PatchID
set p.EarliestDate = t.newEarliest

请看:@草莓,我以为我有?我已经尝试了这个和几个变体,但我得到了一个错误“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在“from”(选择t1.PatchID)附近使用,@BaneStar007,立即尝试