【发布时间】:2021-06-21 19:42:47
【问题描述】:
给定一张人员表和与他们的评估相关的分数,我需要获取他们每次评估的累积分数(按人)。
| Person | EvaluationDate | Score |
|---|---|---|
| Jane | 2012 | -12 |
| Hubert | 2014 | -5 |
| Jane | 2020 | -5 |
| Jane | 2015 | +16 |
| Hubert | 2011 | -100 |
他们的分数从100开始,不能低于0或超过100。如果在某个时间分数超过100(或低于0),则从100(或0)开始计算下一个累积分数。
预期输出:
| Person | EvaluationDate | Score | CumulativeScore |
|---|---|---|---|
| Hubert | 2011 | -100 | 0 |
| Hubert | 2014 | -5 | 0 |
| Jane | 2012 | -12 | 88 |
| Jane | 2015 | +16 | 100 |
| Jane | 2020 | -5 | 95 |
有posts describing how to do a cumulative sum,但他们没有解释如何通过每个操作将其限制在一个范围内。
【问题讨论】:
-
没错,我更新了问题。
-
您正在搜索Capping a running total。 SQL Server 的可能方法:递归 CTE 或 cursor/while 循环(不是基于集合的解决方案)或quirky update(Do not use on production)
标签: sql sql-server tsql