CTE не может быть обновлено. Я вижу, что вы хотите обновить все строки в таблице, кроме одной в каждой группе (Date_key, ITEM_KEY, location_key), хотя мне не ясно, хотели ли вы исключить самую новую или самую старую строку в группе. Вы называете это min_age, но похоже, что вы на самом деле смотрите на максимальный возраст. Вы также не указываете, будет ли минимальное или максимальное значение INVENTORY_AGE уникальным для каждой группы. В любом случае, я надеюсь, что следующие примеры дадут вам представление, как к этому подойти. Попробуйте что-то вроде:
UPDATE DWH_FACT_INVENTORY
SET ISSUED_QUANTITY = 0
WHERE ISSUED_QUANTITY <> 0 AND
INVENTORY_AGE <> (
SELECT MAX(INVENTORY_AGE)
FROM DWH_FACT_INVENTORY mdfi
WHERE mdfi.Date_key = DWH_FACT_INVENTORY.Date_key AND
mdfi.ITEM_KEY = DWH_FACT_INVENTORY.ITEM_KEY AND
mdfi.location_key = DWH_FACT_INVENTORY.location_key
)
Или как-то так:
UPDATE DWH_FACT_INVENTORY
SET ISSUED_QUANTITY = 0
FROM DWH_FACT_INVENTORY INNER JOIN
(
SELECT Date_key, ITEM_KEY, location_key, MAX(INVENTORY_AGE) AS max_age
FROM DWH_FACT_INVENTORY
GROUP BY Date_key, ITEM_KEY, location_key
) mdfi ON mdfi.Date_key = DWH_FACT_INVENTORY.Date_key AND
mdfi.ITEM_KEY = DWH_FACT_INVENTORY.ITEM_KEY AND
mdfi.location_key = DWH_FACT_INVENTORY.location_key
WHERE ISSUED_QUANTITY <> 0 AND
INVENTORY_AGE <> max_age