【发布时间】:2018-04-20 23:34:35
【问题描述】:
我试图避免在此解决方案中使用循环,而是使用基于集合的操作。
我需要根据最近一次与另一个表的连接来更新表中的每条记录。我的第一个想法是加入我需要“最近日期”的表并根据加入条件分组,但使用 GROUP BY 和 UPDATE 是无效的。
这是我目前所拥有的。我觉得这将通过 CTE 解决...
CREATE TABLE Part (
Area VARCHAR(10) NOT NULL,
SequenceNumber INT NOT NULL,
DateAdded DATETIME NOT NULL
);
INSERT INTO Part VALUES
('A', 1, '2018-04-01'),
('A', 1, '2018-04-02'),
('A', 2, '2018-04-03'),
('A', 2, '2018-04-04'),
('B', 2, '2018-04-04'),
('B', 2, '2018-04-03'),
('B', 3, '2018-04-02'),
('B', 3, '2018-04-01');
DECLARE @Filters TABLE
(
Area VARCHAR(10),
StartingSeqNum INT,
StartTime DATETIME
);
INSERT INTO @Filters VALUES
('A', 2, NULL),
('B', 3, NULL);
-- Update each StartTime in @Filters with the most recent
-- DateAdded of the corresponding SequenceNumber in the Part table per Area.
UPDATE f
SET f.StartTime = MAX(p.DateAdded)
FROM
@Filters f
INNER JOIN Part p ON p.Area = f.Area
AND p.SequenceNumber = f.StartingSeqNum
GROUP BY
p.Area,
p.SequenceNumber;
根据上面的示例数据,该操作应在@Filters 中填充以下值:
('A', 2, '2018-04-04')
('B', 3, '2018-04-02')
【问题讨论】:
标签: sql sql-server