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
我有一个 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