Teradata SQL 移动总和

Teradata SQL moving sum

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

我想我们可以使用 SUM Over with 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

试试这个:

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

Teradata 的 syntax/functions 可能需要不同,但以下 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 table 与其自身(一对多)连接起来,获取前 365 天的所有记录。然后我们总结一下。请注意,s.sales 未求和,因为此值将针对 s2 中的每条记录重复。 (您可以使用 AVERAGE 而不是将其放在 GROUP BY 中)

试试这个。根据您的 need.hope 调整 "preceding" 截止值,这有帮助。

    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