【发布时间】:2016-04-23 00:53:42
【问题描述】:
我正在尝试根据日期汇总产品价值。下面的示例从 20,000 开始,加上 5,000,然后减去 7,000。结果应该是吃完整个 5,000,然后进入前面的正数行。这将删除 5,000 行。
我认为这就像执行按日期降序排序的求和窗口函数一样简单。但是,正如您在下面看到的,我想在任何仍然为正的行处停止求和,然后移至下一行。
我无法弄清楚 SQL 中的逻辑来完成这项工作。在我的脑海里,应该是:
SUM(Value) OVER (PARTITION BY Product, (positive valued rows) ORDER BY Date DESC)
但是一行中可能有多个正值行,其中一个负值行可能会吞噬所有行,或者一行中可能有多个负值。
This post 似乎很有希望,但我认为如果负值大于正值,该逻辑将不起作用。
有:
+------------+----------------+-------+
| Date | Product | Value |
+------------+----------------+-------+
| 01/13/2015 | Prod1 | 20000 |
| 08/13/2015 | Prod1Addition1 | 5000 |
| 12/13/2015 | Prod1Removal | -7000 |
| 02/13/2016 | Prod1Addition2 | 2000 |
| 03/13/2016 | Prod1Addition3 | 1000 |
| 04/13/2016 | Prod1Removal | -1500 |
+------------+----------------+-------+
想要:
+------------+----------------+-------+
| Date | Product | Value |
+------------+----------------+-------+
| 01/13/2015 | Prod1 | 18000 |
| 02/13/2016 | Prod1Addition2 | 1500 |
+------------+----------------+-------+
【问题讨论】:
标签: sql sql-server