从结果组的结果MAX的结果中更新所有字段

问题描述 投票:1回答:1

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

补丁表:

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命令?

mysql max dateadd
1个回答
1
投票

尝试此查询。您可以在进行更新之前先将max()group byPatchID作为subquery获得。

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
© www.soinside.com 2019 - 2024. All rights reserved.