Если ваш SQL дает таблицу и псевдоним, вам нужно использовать псевдоним, а не имя таблицы везде, поэтому обновление должно быть UPDATE V, а не UPDATE PO_VEND_ITEM.
В любом случае, это все ещене решит вашу проблемуВы не можете обновить агрегированный запрос - суть агрегации состоит в том, что он группирует строки, и поэтому больше не связывает исходные строки - он не знает, какие строки нужно обновить.
ОБНОВЛЕНО НИЖЕ, УДАЛЕНО НЕПРАВИЛЬНЫЕ ДАННЫЕ.
Если вы хотите отсортировать по одному столбцу, но использовать другой столбец, агрегаты обычно не будут работать.Вместо этого в подзапросе сортируйте данные, которые вам нужно использовать, присваивая им номер строки, а затем присоединяйте только к строке 1 - той строке, в которой находятся нужные вам данные.Это обновит только строки PO_VEND_ITEM, в которых есть любые соответствующие строки PO_RECVR_HIST_LIN - если вы хотите обновить их все, то измените внутреннее соединение на левое внешнее соединение, и для любых без соответствующих строк будет установлено значение NULL.
UPDATE V SET PUR_UNIT = R.QTY_UNIT
FROM PO_VEND_ITEM V
INNER JOIN (
SELECT ITEM_NO, QTY_UNIT, ROW_NUMBER() OVER (PARTION BY ITEM_NO ORDER BY RECVR_DAT DESC) RowNo
FROM PO_RECVR_HIST_LIN
) R ON R.ITEM_NO = V.ITEM_NO AND R.RowNo = 1;