Это вариация на общую тему. Приложение, похожее на этот тип запроса, используется для работы с дублирующимися строками. В этом senario вы можете удалить все, кроме одной строки набора.
Этот запрос решает вашу проблему:
ОБЪЯВИТЬ @Stock AS TABLE (SKU Bigint, ProductCode Bigint, StatusCode Bigint)
INSERT INTO @Stock VALUES (1,111111,1)
INSERT INTO @Stock VALUES (2,111111,2)
INSERT INTO @Stock VALUES (3 222 222,1)
INSERT INTO @Stock VALUES (4,222222,2)
INSERT INTO @Stock VALUES (5,333333,2)
INSERT INTO @Stock VALUES (6,333333,2)
ОБЪЯВИТЬ @Listed AS TABLE (ListID Bigint, SKU Bigint, ListDate DateTime)
INSERT INTO @Listed VALUES (1,1, 01/01/2009)
INSERT INTO @Listed VALUES (2,2, '02/01/2009')
INSERT INTO @Listed VALUES (3,3, '03 / 01/2009 ')
INSERT INTO @Listed VALUES (4,4, '04/01/2009')
INSERT INTO @Listed VALUES (5,5, '05/01/2009')
INSERT INTO @Listed VALUES (6,6, '06 / 01/2009 ')
ОБНОВЛЕНИЕ @Stock
SET StatusCode = 1
ОТ @Stock AS T1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ @ Внесено в список T2 ON T1.SKU = T2.SKU
ГДЕ
T1.SKU IN
(ВЫБЕРИТЕ ТОП 1 T3.SKU ОТ @Stock AS T3
ВНУТРЕННЕЕ СОЕДИНЕНИЕ @ Внесено в список T4 ON T3.SKU = T4.SKU
AND T3.ProductCode = T1.ProductCode ORDER BY ListDate)
И ProductCode IN
(ВЫБЕРИТЕ DISTINCT ProductCode
ОТ @Stock AS S1
ГДЕ НЕ ВХОДИТ (ВЫБЕРИТЕ DISTINCT StatusCode ОТ @Stock AS S2, ГДЕ S2.ProductCode = S1.ProductCode))