【发布时间】:2019-07-15 17:18:39
【问题描述】:
我正在使用 DB2 代码计算当月至今的销售额,以比较 2019 年 7 月与 2018 年 7 月的总数。
需要滚动比较当前月份的数据和去年同月的数据,否则我是在比较两个不同时期的数据。
如果它是静态的,我将比较 mtd 七月(2019 年)第 2 周的销售额与 mtd 七月第 4 周(2018 年)的销售额。
我需要 mtd 2019 年 7 月第 2 周与 mtd 7 月(2018 年)第 2 周 mtd 销售。
如何在 DB2 中获得 MTD 滚动销售?
我尝试了一个静态 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;
【问题讨论】:
-
什么平台和版本的 Db2?
-
有没有一种简单的方法可以检查 SQuirreL SQL 客户端以验证什么版本?
标签: sql db2 cumulative-sum