Конечно - довольно просто - используйте CTE (Common Table Expression), который разбивает ваши данные по набору «группировки».
;WITH DataToUpdate AS
(
SELECT
GroupNo, SSN, CovEndDate AS 'MaxCovEndDate',
ROW_NUMBER() OVER(PARTITION BY GroupNo,SSN ORDER BY CovEndDate DESC) AS 'RowNum'
FROM dbo.Payroll
UPDATE
)
UPDATE dbo.EligCov
SET CovEndDate = d.MaxCovEndDate
FROM DataToUpdate d
WHERE gpno = d.GroupNo
AND ssn = d.SSN
AND d.RowNum = 1 -- select the latest date - the one with RowNum = 1
CTE разбивает ваши данные на GroupNo,SSN
, поэтому каждой группе GroupNo,SSN
выдается новый ROW_NUMBER()
, начиная с 1. Поскольку строки отсортированы по CovEndDate DESC
, самые последние / самые последние CovEndDate
получает RowNum = 1
.
На основе этого CTE вы затем обновляете таблицу EligCov
, принимая только самые последние записи, для каждой группы GroupNo,SSN