2016-07-01 36 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

如果表很大,这可能不会是最有效的查询 - 使用窗口函数会更好。 –