已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
6天前关闭。
Improve this question
我有这样一张表:
id | name | amount (in $)
--------------
1 | A | 10
1 | A | 5
1 | A | 20
1 | A | 20
1 | A | 40
1 | A | 30
2 | B | 25
2 | B | 20
2 | B | 30
2 | B | 30
我如何对$5以上的每个ID的amount列求和,以便当求和达到某个值(例如$50)时,它在下一行中对该ID执行另一个求和?
因此,根据上表,我们将得到:
id | name | amount (in $)
--------------
1 | A | 5 --skips the amount that is not above $5
1 | A | 50 --the next three rows sum up to $50
1 | A | 70 --the value of the next row is not up to $50, so it sums the next line. Summation is more than $50, but no problem
2 | B | 75
2 | B | 30
1条答案
按热度按时间jdgnovmf1#
这可能不是最简单的解决方案,但它确实有效。
您的示例数据存在根本性的缺陷,因为您需要一个列来对行进行排序,以实现您想要的结果。我已经假定您通过向示例数据添加一个identify列来获得这样一个列。
帮助理解的要点:
1.计算一个标识的运行合计,忽略太小的金额。
1.当超过指定的阈值时,使用此运行总数计算(除以阈值)
1.用于保留阈值发生更改的每一行的标志,即阈值被超过一次、两次、三次等。
1.对于保留的每一行,减去前一个值以给予差值。
按要求退货:
| 标识符|姓名|数量|
| - -|- -|- -|
| 一个|A级|五点整|
| 一个|A级|50元|
| 一个|A级|七十元|
| 2个|B|七十五元|
| 2个|B| 30点整|
注意:提供DDL+DML(如我在这里所示)会使问题更容易回答。