Добро пожаловать в переполнение стека!Попробуйте это:
DECLARE @Table TABLE
(
Id INT IDENTITY PRIMARY KEY,
Customer INT,
Document VARCHAR(100),
Date DATE,
DateCleared DATE
)
INSERT INTO @Table
VALUES
(151, 'Invoice', '20190218', NULL),
(151, 'Receipt', '20190214', '20190214'),
(151, 'Invoice', '20190118', NULL),
(151, 'Invoice', '20181218', NULL),
(151, 'Invoice', '20181119', NULL),
(152, 'Receipt', '20181107', '20181107'),
(152, 'Invoice', '20181018', NULL),
(152, 'Invoice', '20180918', NULL),
(152, 'Receipt', '20180926', '20180926'),
(152, 'Invoice', '20180820', NULL)
UPDATE invoice
SET DateCleared = matchingReceipt.DateCleared
FROM @Table AS invoice CROSS APPLY
(
SELECT TOP(1) receipt.DateCleared
FROM @Table AS receipt
WHERE invoice.Customer = receipt.Customer AND
invoice.Date < receipt.Date AND
receipt.Document = 'Receipt'
ORDER BY DateCleared ASC
) AS matchingReceipt
WHERE invoice.Document = 'Invoice'
SELECT * FROM @Table ORDER BY Customer, Date
Я добавил столбец идентификаторов в таблицу.Вы используете CROSS APPLY для поиска соответствующей квитанции с учетом ваших правил (тот же клиент, очищенный после выставления счета и более поздний).