Почему это НЕ работает?
update table
set flag = '1'
where id in (select id from (SELECT PK1, PK2, id, date,value,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY value DESC, date DESC) AS RN
FROM table) t where RN = 1)
РЕДАКТИРОВАТЬ: приведенный ниже оператор будет работать , если вы не хотите (или не можете в некоторых версиях sql) использоватьcte
Выше не будет работать, потому что, как говорит Мартин ниже, идентификатор все еще в списке.
однако ниже будет работать, если кто-то предпочитает не использовать cte. (Непочти столь же элегантно, как решение Мартина)
update table
set flag = '1'
where convert(varchar,PK1)+convert(varchar,PK2) in (select convert(varchar,PK1)+convert(varchar,PK2) from (SELECT PK1, PK2, id, date,value,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY value DESC, date DESC) AS RN
FROM table) t where RN = 1)