Вы внутренне присоединяетесь к таблицам (здесь я предполагаю, что он основан на столбце NIP
, поскольку фактическая информация не указана)
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
INNER JOIN dailydata DD ON DDW.NIP = DD.NIP
AND DDW.NAME = DD.NAME
AND DDW.DEPARTMENT = DD.DEPARTMENT
WHERE DD.STATUSTYPE = 'OUT'
ОБНОВЛЕННЫЙ ЗАПРОС.
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
INNER JOIN
(
SELECT NIP, NAME, DEPARTMENT, DATEATTEND = MAX(DATEATTEND)
FROM dailydata
WHERE STATUSTYPE = 'OUT'
GROUP BY NIP, NAME, DEPARTMENT
) DD ON DDW.NIP = DD.NIP
AND DDW.NAME = DD.NAME
AND DDW.DEPARTMENT = DD.DEPARTMENT
WHERE DDW.STATUSOUT IS NULL
ОБНОВЛЕНИЕ ЗАПРОСА № 2.
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
CROSS APPLY
(
SELECT TOP 1 d.DATEATTEND
FROM dailydata d
WHERE d.STATUSTYPE = 'OUT'
AND d.NIP = DDW.NIP
AND d.NAME = DDW.NAME
AND d.DEPARTMENT = DDW.DEPARTMENT
ORDER BY d.ID DESC
) DD
WHERE DDW.STATUSOUT IS NULL
Этот запрос объединяет вставку и обновление в один запрос
; WITH CTE AS
(
SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY NIP, NAME, DEPARTMENT
ORDER BY DATEATTEND)
FROM DAILYDATA
)
INSERT INTO DAILYDATAWH (NIP, NAME, DEPARTMENT, STATUSIN, STATUSOUT)
SELECT NIP, NAME, DEPARTMENT, STATUSIN = MIN(DATEATTEND), STATUSOUT = MAX(DATEATTEND)
FROM CTE
GROUP BY NIP, NAME, DEPARTMENT, (RN - 1) / 2
db <> fiddle