2012-06-04 53 views
1

我的問題是,我有一些季度數據,但需要每天使用另一個每日價值重新計算。基本上,我正在使用季度財務數據,但我需要使用每日價格數據重新計算每日頻率的一些比率。在下面這個例子中,我給出了c.atq和c.csh12q季度的值,以及每日s1.prccd的值。我需要使用當前的s1.prccd來計算當前c.atq的比率。當季度末c.atq發生變化時,流程應繼續使用新值。SQL中每日頻率計算的季度數據?

select s1.DATADATE, c.ATQ, s1.PRCCD, c.ATQ/(s1.PRCCD*c.CSH12Q) as PATQ 
from sec_dprc s1 
left outer join co_ifndq c 
on s1.GVKEY = c.GVKEY 
and s1.DATADATE = c.DATADATE 
where s1.GVKEY = 008068 
order by s1.DATADATE 

這是結果的小桌子:

DATADATE   ATQ  PRCCD PATQ 
19/12/1984 00:00 NULL 28  NULL 
20/12/1984 00:00 NULL 27.25 NULL 
21/12/1984 00:00 NULL 27.5 NULL 
24/12/1984 00:00 NULL 27.5 NULL 
26/12/1984 00:00 NULL 27.5 NULL 
27/12/1984 00:00 NULL 27.625 NULL 
28/12/1984 00:00 NULL 27.75 NULL 
31/12/1984 00:00 12273 28  4.400022371 
02/01/1985 00:00 NULL 27.5 NULL 
03/01/1985 00:00 NULL 26.75 NULL 
04/01/1985 00:00 NULL 25  NULL 
07/01/1985 00:00 NULL 24  NULL 
08/01/1985 00:00 NULL 25  NULL 
09/01/1985 00:00 NULL 25.375 NULL 

我需要在以下所有日常日期被複制,直到下一季度改變c.ATQ的價值。

謝謝!

第2部分:

GVKEY rankx rdq     QTR ATQ   CSH12Q DATADATE 
008068 2 1984-02-03 00:00:00.000 1 11775.402 96.569 1983-12-31 00:00:00.000 
008068 3 1984-05-07 00:00:00.000 2 11428.602 96.751 1984-03-31 00:00:00.000 
008068 4 1984-08-02 00:00:00.000 3 11642.902 98.104 1984-06-30 00:00:00.000 
008068 5 1984-10-18 00:00:00.000 4 11654.5  98.984 1984-09-30 00:00:00.000 

類似:

DATADATE    ATQ  PRCCD PATQ datadate rdq 
1984-01-31 00:00:00.000 NULL 28  NULL NULL NULL 
1984-02-01 00:00:00.000 NULL 28.625 NULL NULL NULL 
1984-02-02 00:00:00.000 NULL 27.875 NULL NULL NULL 
1984-02-03 00:00:00.000 11775.2 26.75 4.55841 1983-12-31 1984-02-03 00:00:00.000 
1984-02-06 00:00:00.000 NULL 27  NULL NULL NULL 
1984-02-07 00:00:00.000 NULL 26.875 NULL NULL NULL 
1984-02-08 00:00:00.000 NULL 25.75 NULL NULL NULL 
+0

如果沒有更多的信息/源數據示例,很難弄清楚你需要什麼。但是,考慮到這個問題,我認爲使用窗口函數可以解決你的任務。 – Lucero

回答

1

如果沒有一個鍵已鏈接季度日期,一個ID可以通過使用類似

select DATEPART(YYYY,datetimevalue) * 10 + DATEPART(q,datetimevalue) 
效仿

語法明智,它會看起來更好的功能,但它應該通過改變連接的日期時間部分於:

DATEPART(YYYY,s1.DATADATE) * 10 + DATEPART(q,s1.DATADATE) = DATEPART(YYYY,c.DATADATE) * 10 + DATEPART(q,c.DATADATE) 

如果給雙記錄,公用表表達式(含)可以用來分別獲得第一季度數據。

+0

嘿,這種工作,但我需要計算它前進..在上面的例子中,值12273,1984年12月31日只應用於日期後31/12/1984 ..我想使用當前價值向前(使用它爲以前的日期會產生事後偏見) – user1129988

+0

我去吧..加1到上面.. thats it:DATEPART(YYYY,s1.DATADATE)* 10 + DATEPART(q,s1.DATADATE) = DATEPART(YYYY,c.DATADATE)* 10 + DATEPART(q,c.DATADATE)+ 1 – user1129988

+1

很高興您能找到它。建議的意見然而,+ 1將不會在12月與這個呼應(這將比較2012年的第五季)工作。然而,通過乘以4而不是10,可以安全地使用(10使得易讀性更好,但是4會給出所有季度的總和)。總結:DATEPART(YYYY,s1.DATADATE)* 4 + DATEPART(q,s1.DATADATE)= DATEPART(YYYY,c.DATADATE)* 4 + DATEPART(q,c.DATADATE)+ 1 –