2016-03-18 15 views
1

MS SQL Serverに固有の重複レコードを持つテーブルがあります。MS SQL:各グループの最後のレコードのみを更新します。

はのは、私のテーブルには、あなたが見ることができるように、私はname列に重複を持って

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がある場合を除いて、UserTypeEx4096であるにすべてのvisibilityフィールドを更新することです。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

お返事ありがとうございます。魅力的な作品 –

関連する問題