2016-03-18 3 views
1

У меня есть таблица в MS SQL Server, в которой есть уникальные и повторяющиеся записи.MS SQL: обновлять только последнюю запись каждой группы

Скажем, мой стол, как

Name Modified Visibility UserTypeEx 
x  24.05.2015  1   4096 
y  01.01.2014  0   4096 
z  01.04.2016  1   4096 
x  05.03.2015  1   4096 
y  06.08.2015  1   4097 
y  05.07.2014  1   4096 

Как вы можете видеть, у меня есть дублирование в name колонке. То, что я пытаюсь сделать, - это обновить все поля visibility до 0, где UserTypeEx - 4096, за исключением того, что там, где есть дубликат name s Я хочу обновить только добавленную запись среди тех, кто в каждой группе делится name.

Такое обновление будет преобразовывать данные примера этому:

Name Modified Visibility UserTypeEx 
x  24.05.2015  0   4096 
y  01.01.2014  0   4096 
z  01.04.2016  0   4096 
x  05.03.2015  1   4096 
t  06.08.2015  1   4097 
y  05.07.2014  0   4096 

Любые предложения?

ответ

2

В SQL Server вы можете использовать функции окна с обновлением. Это очень удобно:

with toupdate as (
     select t.*, 
      row_number() over (partition by name order by modified desc) as seqnum, 
      count(*) over (partition by name) as cnt 
     from t 
     where UserTypeEx 
    ) 
update toupdate 
    set visibility = 0 
    where cnt > 1 and seqnum = 1; 
+0

Спасибо за ответ. Работает как шарм –

Смежные вопросы