2014-03-26 40 views
0
nYear GrpMeanTally y1 
1910  4.1 1915   
1911  7.2 1915   
1912  4.6 1915   
1913  5.6 1915   
1914  2.3 1915   
1915  1.7 1915   
1916  4.2 1915   
1917  5.2 1915   
1918  6.0 1915  
1919  1.9 1915   

如何使用y1的值爲每個nYear填充y1列作爲前5年的GrpMeanTally值。即Y1每年= GrpMeanTally在nYear-5根據公式從現有列中填充新列

預期了把爲nyear = 1918將GrpMeanTally在nyear = 1918 - 5 = 1913,即Y1 = 5.6

+0

你能把期望的輸出呢? –

回答

0

,如果你的SQL Server 2012的嘗試這樣的:

;WITH t2 as 
(select nyear, LAG(GrpMeanTally,5) OVER (ORDER by nyear) lagvalue FROM t) 

UPDATE t1 SET y1=t2.lagvalue 
FROM t t1 
JOIN t2 ON t2.nyear=t1.nyear 

2008年:

;WITH t2 as 
(select nyear, GrpMeanTally, ROW_NUMBER() OVER (ORDER by nyear) rowno FROM t), 
t3 AS 
(SELECT ta.nyear, tb.GrpMeanTally lagvalue FROM t2 ta JOIN t2 tb ON ta.rowno-5=tb.rowno) 

UPDATE t1 SET y1=t3.lagvalue 
FROM t t1 
JOIN t3 ON t3.nyear=t1.nyear 
+0

我使用SQL Server 2008 – Abs

+0

新增2008 – Jayvee

+0

一個解決方案時,我嘗試運行:;其中T2爲 (選擇nyear,GrpMeanTally,ROW_NUMBER()OVER(由nyear ORDER)rowno FROM T), T3 AS ( SELECT ta.nyear,tb.GrpMeanTally lagvalue FROM t2 ta JOIN t2 tb ON ta.rowno-5 = tb.rowno)它在結尾處用紅線表示並且在')'附近語法不正確。 – Abs