2017-05-18 30 views
0

私は以下のようなテーブルを持っています。 enter image description here特定の条件に基づいてテーブルを更新するにはどうすればよいですか?

下記のように更新します。 enter image description here

それらは同じA_ID and B_IDを有する対応するレコードがある場合は基本的に、レコード当たり、C_ID<>0(この場合A_ID=1001 and A_ID=1002)しながらは、ActiveFrom - 1 secondに対応するIsCurrent=0ActiveToを設定します。

ありがとう

+0

? –

+0

@KannanKandasamy SQL Server 2012 – kzhang12

答えて

2

Hmmm。 。 。あなたのようにレコードを識別することができます

select t.* 
from (select t.*, 
      lead(ActiveFrom) over (partition by a_id, b_id order by c_id) as next_ActiveFrom 
     from t 
    ) t 
where c_id = 0 and next_ActiveFrom is not null; 

そして、それらを更新:

SQL Serverのバージョン
with toupdate as (
     select t.* 
     from (select t.*, 
        lead(ActiveFrom) over (partition by a_id, b_id order by c_id) as next_ActiveFrom 
      from t 
      ) t 
     where c_id = 0 and next_ActiveFrom is not null 
    ) 
update toupdate 
    set isactive = 0, 
     activeTo = dateadd(second, -1, next_ActiveFrom); 
+0

これは速いです。ありがとう。 – kzhang12

関連する問題