我有一个包含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
答案 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;