2016-07-01 74 views
0

我有一個按日期具有每日銷售額的2列表。我需要計算一個總計過去365天銷售額的列。Teradata SQL移動金額

我想我們可以使用SUM Over和ROW Preceeding選項。但是我不確定語法。

請幫忙。

RPT_DT sales   last_year_sales 
    2/1/2015 150,876.00 
    .  
    .  
    .  
1/29/2016 430,715.31 
1/30/2016 407,864.88 
1/31/2016 355,793.55 
2/1/2016 331,142.13 SUM sales from 2/1/15 to 01/31/16 
2/2/2016 269,016.02 SUM sales from 2/2/15 to 02/01/16 
2/3/2016 295,007.69 SUM sales from 2/3/15 to 02/02/16 
+0

日期中是否有空白? – dnoeth

回答

1

試試這個。根據您的需要調整「前面的」截止點,這對您有所幫助。

Select 
    rpt_dt, 
    sales, 
    SUM(sales) OVER (ORDER BY rpt_dt ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) 
    FROM test 
    GROUP BY 1,2 
    ORDER BY 1 
-1

試試這個:

select sum(sales) as sales from table1 where `date` between 01/01/2015 and 31/12/2015; 
+0

這不回答我的問題 – userNid

+0

如果它不回答你的問題,那麼你必須投票給它,,, ofcourse ,,,我只是想弄明白,謝謝.. –

+0

我沒有下降投票。我沒有足夠的信譽評分來投票。其他人也這樣做 – userNid

0

語法/功能可能需要爲Teradata不同,但下面的SQL查詢可能會有所幫助:

SELECT 
    s.rpt_date 
    ,s.sales 
    ,SUM(s2.sales) 

FROM dailySales s 
JOIN dailySales s2 ON 
    s2.rpt_date BETWEEN DATEADD(dd, s.rpt_date,-365) AND DATEADD(dd,s.rpt_date,-1) 

GROUP BY 
    s.rpt_date 
    ,s.sales 

查詢聯接的dailySales表自己(一對多),獲取前365天的所有記錄。然後我們總結它們。請注意,s.sales不會相加,因爲此值將在s2中的每條記錄中重複。 (你可以使用AVERAGE而不是把它放在GROUP BY

+0

如果表很大,這可能不會是最有效的查詢 - 使用窗口函數會更好。 –