Teradata SQL移动总和

时间:2016-07-01 08:46:15

标签: sql teradata

我有一个包含2列的表,按日期每日销售。我需要计算一个列,该列汇总过去365天的销售额。

我认为我们可以使用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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:-2)

试试这个:

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