SQL Server将NULL值替换为上一行的最后一个值

时间:2016-10-04 04:11:37

标签: sql-server

我想使用第一个Null之前的值替换每个代码组的NULL值:

code     amount       date
-------------------------------
 A        1500     2013-02-03
 A        1800     2013-03-05
 A        1300        NULL
 A        1300        NULL
 B        1300     2013-05-03
 B        1300     2013-06-01
 B        1300     2013-07-02
 B        1600        NULL
 B        1300        NULL
 C        1200     2014-07-02
 C        1500     2014-08-05
 C        1700        NULL
 C        1100        NULL
 C        1300        NULL

在此表中,我想将NULL值替换为每个"代码"的日期。具有该代码的最后日期值。例如代码A的日期应如下所示,其他日期相同。

code     amount       date
-----------------------------
 A        1500     2013-02-03
 A        1800     2013-03-05
 A        1300     2013-03-05
 A        1300     2013-03-05

我知道这个问题有其他类似的帖子,但没有一个给我上面的结果。我想因为为每个特定代码选择最后一个值有点棘手。

1 个答案:

答案 0 :(得分:2)

怎么样?

UPDATE mytable
SET date = date2
FROM mytable o
  CROSS APPLY
    (SELECT MAX(date) date2 FROM mytable i WHERE i.id=o.id group by id) ii
where o.date is null