2016-10-04 34 views
0

最后一个值替换NULL值,我想第一个空之前,使用值的每个码组替换NULL值:的SQL Server与前一行

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

什么是你的SQL Server的版本 – TheGameiswar

+0

像'UPDATE t将[日期] = U. [日期] FROM mytable的T交叉APPLY(SELECT MAX([日])FROM myTable的WHERE码= T.代码)U([日期])WHERE T. [日期]是NULL'? – ZLK

+0

你想要在原始表中更新''NULL'值,还是写一个'SELECT'查询来返回没有NULLs的结果集? –

回答

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