我不知道如何编写一个查询,根据另一个表中的规则按项目返回滚动总和。
下面是按时间顺序列出特定日期某一商品的库存价值的表格。
表 1:库存
物品 | 库存 | 日期 |
---|---|---|
刀刃 | 10 | 2020 年 1 月 3 日 |
刀刃 | 20 | 2020 年 1 月 4 日 |
刀刃 | 三十 | 2020 年 1 月 5 日 |
刀刃 | 40 | 2020 年 1 月 6 日 |
刀刃 | 50 | 2020 年 1 月 7 日 |
刀刃 | 60 | 2020 年 1 月 8 日 |
刀刃 | 70 | 2020 年 1 月 9 日 |
桌子 | 10 | 2020 年 1 月 3 日 |
桌子 | 20 | 2020 年 1 月 4 日 |
桌子 | 三十 | 2020 年 1 月 5 日 |
桌子 | 40 | 2020 年 1 月 6 日 |
桌子 | 50 | 2020 年 1 月 7 日 |
桌子 | 60 | 2020 年 1 月 8 日 |
桌子 | 70 | 2020 年 1 月 9 日 |
另一个表针对每个项目有两条规则,即使用多少天来计算滚动总和值。
表 2:规则
物品 | 规则 | 价值 |
---|---|---|
刀刃 | 累计总数 | 2.5 |
刀刃 | lead_sum | 2.5 |
桌子 | 累计总数 | 3 |
桌子 | lead_sum | 3 |
输出: cum_sum:对于 Balde,日期 - 2020 年 1 月 3 日,规则为 2.5,因此值 = 10+20+30 * 0.5 lead_sum:对于 Balde,日期 - 2020 年 1 月 3 日,规则为 2.5,因此值 = 20+30+40 * 0.5
我如何编写查询来考虑最后日期的部分值。
物品 | 库存 | 日期 | 累计总数 | lead_sum |
---|---|---|---|---|
刀刃 | 10 | 2020 年 1 月 3 日 | 四十五 | 70 |
刀刃 | 20 | 2020 年 1 月 4 日 | 70 | 95 |
刀刃 | 三十 | 2020 年 1 月 5 日 | 95 | 120 |
刀刃 | 40 | 2020 年 1 月 6 日 | 120 | 145 |
刀刃 | 50 | 2020 年 1 月 7 日 | 145 | 130 |
刀刃 | 60 | 2020 年 1 月 8 日 | 130 | 70 |
刀刃 | 70 | 2020 年 1 月 9 日 | 70 | 0 |
桌子 | 10 | 2020 年 1 月 3 日 | 60 | 90 |
桌子 | 20 | 2020 年 1 月 4 日 | 90 | 120 |
桌子 | 三十 | 2020 年 1 月 5 日 | 120 | 150 |
桌子 | 40 | 2020 年 1 月 6 日 | 150 | 180 |
桌子 | 50 | 2020 年 1 月 7 日 | 180 | 130 |
桌子 | 60 | 2020 年 1 月 8 日 | 130 | 70 |
桌子 | 70 | 2020 年 1 月 9 日 | 70 | 0 |
https://sqlfiddle.com/postgresql/online-compiler?id=c87e6a47-0949-4781-b8b5-3559929a063d