【发布时间】:2018-07-08 00:20:42
【问题描述】:
我有一张这样的桌子
+------+--------+
| ID | Salary |
+------+--------+
| 1 | 100 |
| 2 | 40 |
| 3 | 30 |
| 4 | 40 |
| 5 | 90 |
| 6 | 160 |
| 7 | 70 |
| 8 | 40 |
| 9 | 20 |
| 10 | 10 |
| 11 | 200 |
| 12 | 50 |
+------+--------+
我可以进行正常的累积总和,但我需要不同于正常的CUMULATIVE SUM。如果累计和%50高于上一次累计,则下一次累计累计从该值开始
+------+--------+---------------+
| ID | Salary | Running Total |
+------+--------+---------------+
| 1 | 100 | 100 |
| 2 | 40 | 140 |
| 3 | 30 | 170 |
| 4 | 40 | 210 |
| 5 | 90 | 300 |
| 6 | 160 | 460 |
| 7 | 70 | 230 |
| 8 | 40 | 270 |
| 9 | 20 | 290 |
| 10 | 10 | 300 |
| 11 | 200 | 500 |
| 12 | 50 | 250 |
+------+--------+---------------+
我想要这样的输出。
【问题讨论】:
-
嗨。您能否就您要达到的目标添加一些示例?像 input output 这样我们可以更好地理解。由于这个问题很难理解。
-
460 > 1.5 * 300是“重置”并从 160 开始的原因吗?请确认,否则添加更好的解释+更多示例。 -
您能解释一下为什么您的运行总数会在
ID=6而不是ID=2重置。你的 SQL 版本是什么? -
我想检查增量率。对我来说重要的是最后两个运行总数之间的关系。
-
解决这个问题需要递归 CTE。这些都相当昂贵,而且您目前不了解。在提供答案之前,我想确保这个问题很清楚。你能解释一下为什么 50% 以及为什么第 (6) 行与之前的值而不是下一个值结合在一起吗?
标签: sql sql-server moving-average cumulative-sum