【发布时间】:2020-06-10 16:15:20
【问题描述】:
我正在努力根据Val1 和Val2 计算Calc。
Calc = previous_row.Calc + previousr_row.Val1 - previous_row.Val2
输入数据按Date排序。
预期输出:
+---------+--------+------------+------+
| Val1 | Val2 | Date | Calc |
+---------+--------+------------+------+
| 0,00 | 0,00 | 2016-01-01 | 0 |
| 1000,00 | 0,00 | 2020-01-01 | 0 |
| 0,00 | 0,00 | 2020-01-15 | 1000 |
| 0,00 | 500,00 | 2020-02-01 | 1000 |
| 0,00 | 300,00 | 2020-03-01 | 500 |
| 0,00 | 0,00 | 2020-03-15 | 200 |
| 0,00 | 200,00 | 2020-04-01 | 200 |
+---------+--------+------------+------+
已经尝试过 LAG 函数,成功从上一行获取数据,但我无法从上一行获取 Calc 计算值:
LAG(Val1) OVER (ORDER By Date) - LAG(Val2) OVER (ORDER BY Date)
在现实世界的场景中,我将添加 PARTITION BY,但那是另一回事。现在想保持简单。
更新: 受他人启发:
SUM(Val1) OVER(ORDER BY Data) - SUM(Val2) OVER(ORDER BY Data) - Val1 + Val2 AS Calc
虽然它会计算正确的值,但这是否有效?
我正在使用最新的 SQL Server 2019 / Azure SQL。
【问题讨论】:
-
请发布您的尝试。听起来你比你想象的更接近。
-
我已经更新了我的问题。此外,受@Gordon Linoff 的启发,我对我的版本提出了疑问,这是否是有效的解决方案。