Тъй като идентификаторът на потребителя е един и същ във всички редове, получавате една и съща стойност за възрастта.
Това може да се реши с помощта на CTE
, като това:
;with cte as
(
select id, userid, age, ROW_NUMBER() OVER(order by id) rn
FROM #tempMock
)
UPDATE t1
SET t1.age = t2.age
FROM #temp t1
INNER JOIN cte t2 ON t1.userid = t2.userid and t1.id = t2.rn+1;