這是一個很容易的問題,但是想知道是否有人可以提供更優雅的解決方案。隨着時間的推移調整日期列
我有一個表格,包括日期列(月末結束日期)和多個值列 - 說一段時間內各種股票的價格,每個股票一列。我想計算在日期列中表示的每個期間的價值欄的變化(例如,從填充了價格的表格中獲得的每日回報)。
我目前的計劃是加入表與自身簡單地創建了回報RET = b.price/a.price新列 - 1,代碼如下:
select Date, Ret = (b.stock1/a.stock1 - 1)
from #temp a, #temp b
where datediff(day, a.Date,b.Date) between 25 and 35
order by a.Date
這工作正常,但是:
(1)我需要爲數十種股票做這個工作 - 有沒有一種很好的方式來複制計算,而不需要複製和粘貼返回計算並用其他股票名稱替換'stock1' ?
(2)有沒有更好的方法來做這個連接?在這一點上,我實際上正在做一個交叉連接,只保留相鄰的條目(如由datediff和範圍定義),但是想知道是否有更好的方法將這樣的表連接到它本身。
編輯:每請求,數據的格式爲(我的數據有多個價格列雖然):
Date Price
7/1/1996 349.22
7/31/1996 337.72
8/30/1996 343.70
9/30/1996 357.23
10/31/1996 364.07
11/29/1996 385.04
12/31/1996 383.68
,並從,我想計算回報,產生這樣的表(再次,與存在於實際的表的額外價格列的附加列):
Date Ret
7/31/1996 -0.03
8/30/1996 0.02
9/30/1996 0.04
10/31/1996 0.02
11/29/1996 0.06
12/31/1996 0.00
什麼是你的表結構?您正在使用什麼版本的SQL Server? – Lamak
表格結構如上所述:日期列和幾個價格/值列,我想從中計算變化/回報。 我正在使用SQL-Server 2008. – Chris
@Chris:當我們說表結構時,我們的意思是一個create table或類似的東西。還有樣本數據:行和預期的輸出。就目前而言,沒有足夠的答案 – gbn