2017-05-14 80 views
4

我有數據從2008年1月1日至今天按表中第一列的比例排序。每年從零開始的累積列

我在第二列中有值。我可以用下面的代碼做一個累積的第三列,但我不知道如何在每年的1月1日重新開始每年累計。

SELECT 
    t3.Date, 
    SUM(cumul) AS cumul 
FROM (
    SELECT 
     t1.Date, 
     t1.nb, 
     SUM(t2.nb) AS cumul 
    FROM (
     SELECT 
      Ratio.Date, 
      SUM(DailyValue) AS Nb 
     FROM Ratio 
     GROUP BY Ratio.Date 
    )t1 
    INNER JOIN (
     SELECT 
      Ratio.Date, 
      SUM(DailyValue) AS nb 
     FROM Ratio 
     GROUP BY Ratio.Date 
    ) t2 
     ON t1.Date >= t2.Date 
    GROUP BY t1.Date, t1.nb 
)t3 
GROUP BY PnLDate,nb 
ORDER BY pnldate 

回答

3

有使用窗函數SUM

select Date, 
    sum(sum(DailyValue)) over (
     partition by year(date) order by date 
     ) as cumul 
from Ratio 
group by Date 
order by Date; 
+0

完美的作品更好的方法,謝謝! – Rich

+0

@Rich - 不客氣 – GurV

+0

爲什麼'sum(sum(Da​​ilyValue))'?總和(DailyValue)'不夠? http://sqlfiddle.com/#!15/1e120/1 – Blag