Задать вопрос
byte916
@byte916

Как сделать Update взяв значение из таблицы отсортированной в обратном порядке?

Допустим, есть такой запрос:
update Table1
set Table1.F1= Table2.F2
from Table2
where Table1.F3= Table2.F4

Проблема в том, что для каждой записи set происходит при первом совпадении F3 и F4, а мне надо чтобы находилось последнее совпадение. Я бы написал так (но увы, такой запрос не валиден):

update Table1
set Table1.F1= Table2.F2
from (select * from Table2 order by Id desc) Table2
where Table1.F3= Table2.F4

Как написать запрос правильно?
  • Вопрос задан
  • 249 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Как-то так
update Table1
set Table1.F1= Table2.F2
where Table1.F3=(select top 1 F4 from Table2 order by Id desc )
Ответ написан
Комментировать
@edb
SQL
update Table1
set F1 = (SELECT TOP 1 (F2) FROM Table2 T2 WHERE T1.F3 = T2.F4 order by Id desc)
from Table1 t1

или с группировкой, так как первое значение в списке, отсортированном по убыванию это максимум
update Table1
set F1 = (SELECT MAX(F2) FROM Table2 T2 WHERE T1.F3 = T2.F4 GROUP BY F2)
from Table1 t1


при этом надо учесть, что если в Table2 не найдется подходящих данных, то обновится NULL'ом.
Ответ написан
Комментировать
@electwc
Можно сначала увеличить все значения на 1 000 000, а потом уменьшить все на 999 996, тогда дубликатов не будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы