2016-10-04 39 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