SQL - UPDATE(使用同一表中的现有行)

时间:2017-11-14 18:09:20

标签: sql sql-update snowflake-datawarehouse

我有一个表(见下面:当前表),我需要UPDATE第5行,因为ID1的值已经存在(第4行),ID3的值已经存在(第3行)。有{(1)}个表的三(3)个用例。

附加上下文:在最终状态中,UPDATE将只有一个ID1,但可以有多个ID2ID3可以有多个ID3ID1ID2ID1是唯一值,如果表中不存在ID3ID1,则会为ID3分配值ID2

ID1

的用例
  1. 现有行(较小的行#和UPDATE值)具有相同的TIME 值。使用现有ID1值的ID2值。
  2. 现有行(较小的行#和ID1值)具有相同的TIME值。使用现有ID3值的ID2值。
  3. 存在ID3ID1值(尽管不是相同的行)。使用具有最小(最旧)ID3值的行中的ID2值。
  4. 当前表

    TIME

    更新表

    Row    ID1    ID2    ID3    TIME  
    1      A      A      123    12:01AM  
    2      A      A      456    12:05AM  
    3      A      A      789    12:10AM  
    4      B      A      123    12:15AM  
    5      B      B      789    12:20AM  
    6      C      C      987    12:25AM
    

1 个答案:

答案 0 :(得分:1)

我认为您的条件可以简化为从匹配的id2id1中获取最早的id3

update t
    set id2 = tt.new_id
    from (select t.*,
                 (select t2.id2
                  from t t2
                  where t2.id1 = t.id1 or t2.id3 = t.id3
                 ) as new_id
          from t
         ) tt
    where t.id1 = tt.id1;