gpt4 book ai didi

MySQL 按另一个表的 min 更新一个表

转载 作者:行者123 更新时间:2023-12-04 08:09:22 24 4
gpt4 key购买 nike

我想更新表 租赁来自表 历史

CREATE TABLE Lease
(`LeaseID` int, `Name` varchar(3), `Users` varchar(15), `WhoSignID` int, `NoteDate` date)
;

INSERT INTO Lease
(`LeaseID`, `Name`, `Users`, `WhoSignID`, `NoteDate`)
VALUES
(1, 'AAA', '1000,1001', NULL, NULL),
(2, 'BBB', '1002', NULL, NULL),
(3, 'CCC', '1003,1004', NULL, NULL),
(4, 'DDD', '1005,1006, 1007', NULL, NULL)
;

CREATE TABLE History
(`HistoryID` int, `LeaseID` int, `User` int, `SignDate` date)
;

INSERT INTO History
(`HistoryID`, `LeaseID`, `User`, `SignDate`)
VALUES
(1, 1, 1000, '2020-01-05'),
(2, 1, 1001, '2020-01-04'),
(3, 1, 1001, '2020-01-02'),
(4, 1, 1000, '2020-01-03'),
(6, 2, 1002, '2020-05-01'),
(7, 2, 1002, '2020-05-03')
;
我正在寻找一个 Mysql 更新来更新表租约:
NoteDate 和 WhoSignID 基于 SignDate 和 User
其中用户签名日期的最小值
更新后的表租用
LeaseID | Name | Users           | WhoSignID | NoteDate 
1 | AAA | 1000,1001 | 1001 | 2020-01-02
2 | BBB | 1002 | 1002 | 2020-05-01
...

我感谢任何帮助

最佳答案

您的 Lease table 有一个严重的设计问题,因为它将用户存储为 CSV 列表。相反,您应该将每个用户值放在单独的记录中。话虽如此,似乎 CSV 用户列表对您当前的问题并不重要,它只需要找到每个租约的最早日期。如果是这样,那么一个简单的更新连接就足够了:

UPDATE Lease l
INNER JOIN
(
SELECT h1.LeaseID, h1.User, h2.MinSignDate
FROM History h1
INNER JOIN
(
SELECT LeaseID, MIN(SignDate) AS MinSignDate
FROM History
GROUP BY LeaseID
) h2
ON h2.LeaseID = h1.LeaseID AND
h2.MinSignDate = h1.SignDate
) h
ON h.LeaseID = l.LeaseID
SET
WhoSignID = h.User,
NoteDate = h.MinSignDate;

关于MySQL 按另一个表的 min 更新一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66057591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com