sql - 当数字为负时,累积计算未正确完成
问题描述
我有下表:
最终日期 | final_precise_date | local_limit_amount | 限制金额 |
---|---|---|---|
2020 年 12 月 10 日 | 2020-12-10 18:45:10.590 | 1000000.000000 | 4800000.00 |
2020 年 12 月 10 日 | 2020-12-10 18:45:37.650 | 800000.000000 | 4800000.00 |
2020 年 12 月 18 日 | 2020-12-18 19:01:09.530 | 1425000.000000 | 4800000.00 |
2020 年 12 月 31 日 | 2020-12-31 00:00:00.000 | -1425000.000000 | 4800000.00 |
2021 年 1 月 18 日 | 2021-01-18 00:00:00.000 | 500000.000000 | 4800000.00 |
2021 年 4 月 27 日 | 2021-04-27 00:00:00.000 | -800000.000000 | 4800000.00 |
2021 年 7 月 22 日 | 2021-07-22 00:00:00.000 | -1000000.000000 | 4800000.00 |
2021 年 12 月 31 日 | 2021-12-31 00:00:00.000 | -500000.000000 | 4800000.00 |
local_limit_amount 应该从一行到另一行累积增加或减少。
我编写了以下代码以累积获取数据:
SELECT
final_date AS 'value_date'
, final_precise_date AS 'precise_value_date'
, limit_amount
, limit_amount_ccy_id
, (
LAG(local_limit_amount, 1, 0) OVER (ORDER BY final_precise_date)
+ LAG(local_limit_amount, 2, 0) OVER (ORDER BY final_precise_date)
+ local_limit_amount
) AS 'local_limit_amount'
, future_exposure AS 'initial_exposure'
, future_availability AS 'initial_availability'
FROM
#temp3
ORDER BY
final_precise_date ASC
然而,计算只对前 3 行是正确的,因为要增加的数量是正数,从第四行开始,所有的累积都变得错误,因为数量应该是 1800000 而我只看到 800000
价值日期 | 精确值日期 | 限制金额 | limit_amount_ccy_id | local_limit_amount |
---|---|---|---|---|
2020 年 12 月 10 日 | 2020-12-10 18:45:10.590 | 4800000.00 | 22 | 1000000.000000 |
2020 年 12 月 10 日 | 2020-12-10 18:45:37.650 | 4800000.00 | 22 | 1800000.000000 |
2020 年 12 月 18 日 | 2020-12-18 19:01:09.530 | 4800000.00 | 22 | 3225000.000000 |
2020 年 12 月 31 日 | 2020-12-31 00:00:00.000 | 4800000.00 | 22 | 800000.000000 |
2021 年 1 月 18 日 | 2021-01-18 00:00:00.000 | 4800000.00 | 22 | 500000.000000 |
2021 年 4 月 27 日 | 2021-04-27 00:00:00.000 | 4800000.00 | 22 | -1725000.000000 |
2021 年 7 月 22 日 | 2021-07-22 00:00:00.000 | 4800000.00 | 22 | -1300000.000000 |
2021 年 12 月 31 日 | 2021-12-31 00:00:00.000 | 4800000.00 | 22 | -2300000.000000 |
解决方案
如果我正确地跟随了你,你需要sum
amalytical 功能。
代替
(
LAG(local_limit_amount, 1, 0) OVER (ORDER BY final_precise_date)
+ LAG(local_limit_amount, 2, 0) OVER (ORDER BY final_precise_date)
+ local_limit_amount
)
和
Sum(local_limit_amount) OVER (ORDER BY final_precise_date)
推荐阅读
- android - 如果在按下按钮之前未单击复选框,则应用程序崩溃
- c# - 当 C# 导致异常时防止 C++ 应用程序崩溃
- vue.js - Vue - 确认消息中的样式用户输入(允许特定的 html 标签)
- c# - C# BouncyCastle-如何创建 sha512ECDSA 证书和该证书的有效证书吊销列表?
- python - 如何使用 python 从 SQlite3 数据库中查看特定表?
- filemaker - FileMaker 17 API -- sort by recordId instead of fieldName
- python - 为什么在这种情况下需要空间'1 .__hash__()'?
- java - How to update android RecyclerView items after search filter?
- c# - 时间:2019-01-10 标签:c#conversionstringencodenonasciicharacters
- google-bigquery - Big Query The job encountered an error during execution