我正在使用DB2代码计算本月迄今的销售额,以比较2019年7月与2018年7月的总计。
需要比较当前月份的数据和去年同一月份的数据,否则我将比较两个不同时期的数据。
如果是静态的,我将比较mtd 7月(2019年)第2周的销售额与mtd 7月第4周(2018年)的销售额。
我需要2019年7月mtd第2周与mtd(2018年)第2周mtd销售。
如何在DB2中获得MTD Rolling销售?
我尝试了静态MTD-这是;但是,这不是理想的方法。对于滚动,我尝试了sum(),但这会返回语法错误(-119&-727)。
样品表
年|月|周|销量
2018年|七月| 1 | 2000
2018年|七月| 2 | 1500
2018年|七月| 3 | 1000
2018年|七月| 4 | 2000
2019 |七月| 1 | 1750
2019 |七月| 2 | 2100
预期结果
年份|月份|周|销售总计
2018年|七月| 1 | 2000 | 2000
2018年|七月| 2 | 1500 | 3500
2018年|七月| 3 | 1000 | 4500
2018年|七月| 4 | 2000 | 6500
2019 |七月| 1 | 1750 | 1750
2019 |七月| 2 | 2100 | 3850
-从静态
收集的错误结果年份|月份|周|销售总计
2018年|七月| 1 | 2000 | 6500
2018年|七月| 2 | 1500 | 6500
2018年|七月| 3 | 1000 | 6500
2018年|七月| 4 | 2000 | 6500
2019 |七月| 1 | 1750 | 3850
2019 |七月| 2 | 2100 | 3850
来自静态的代码(有效,但不能用于比较当前月份):
Select
a.Year,
a.Month,
a.Week,
sum(a.sales) as weekly
mtd.mtd_sales as MTD
from sales a
inner join
(Select
a.Year,
a.Month,
sum(a.sales) as mtd_sales
from sales a
group by
a.Year,
a.Month) MTD on MTD.week = a.week
group by
a.Year,
a.Month,
a.Week,
mtd.mtd;
我尝试使用下面的代码进行滚动,但是会产生错误(SQL状态-119和-727),我认为这表明语法错误。
滚动代码
Select
a.Year,
a.Month,
a.Week,
sum(a.sales) over (Partition by week order by
month)
from sales a
group by
a.year,
a.month,
a.week;
答案 0 :(得分:1)
仅在原始行级别而不是在聚合查询中运行窗口函数SUM() OVER()
。此外,调整PARTITION BY
和ORDER BY
子句,因为您的分组应为 year ,而 month 和 week 为订购列。
SELECT
s.Year,
s.Month,
s.Week,
s.Sales,
SUM(s.sales) over (PARTITION BY s.Year, s.Month ORDER BY s.Week) as running_total
FROM sales s;
dbfiddle demo (使用Db2 Developer-C 11.1版)