【发布时间】:2019-02-13 12:39:16
【问题描述】:
考虑下面的表结构:
|----------|-----------|----|
| Quantity | BaseValue | Id |
|----------|-----------|----|
| -0.3 | 1 | 1 |
| -0.8 | 1 | 2 |
| 0.5 | 1 | 3 |
| -0.2 | 1 | 4 |
|----------|-----------|----|
假设这是一个名为Transactions 的表。有什么方法可以根据以下规则集对此表进行选择查询,将Quantity 列中的值相加:
- 每行将被求和,其
Id小于 x
- 首先,将
BaseValue添加到一个排序的变量中,我们称之为y - 然后对于每一行,将
Quantity添加到y,如果结果小于0,则y将为0
我希望看到的结果是这样的:
如果 x 为 1,则 y 应为 1
如果 x 为 2,则 y 应为 0.7
如果 x 为 3,则 y 应为 0
如果 x 为 4,则 y 应为 0.5
选择操作后,我想查看下表,例如:
|----------|-----------|----|-----|
| Quantity | BaseValue | Id | Y |
|----------|-----------|----|-----|
| -0.3 | 1 | 1 | 1 |
| -0.8 | 1 | 2 | 0.7 |
| 0.5 | 1 | 3 | 0 |
| -0.2 | 1 | 4 | 0.5 |
|----------|-----------|----|-----|
我使用的 MySQL 版本是:10.2.16-MariaDB
示例:
假设 x 为 4,程序应该如何工作如下:
- Y = BaseValue + 0
- 得到
Id=1的直线,把直线上的Y和Quantity相加,结果是0.7,因为这比0大,现在是Y 0.7 - 得到与
Id=2的直线,将直线中的Y和Quantity相加,结果为-0.1,因为它低于0,Y为现在 0 - 得到
Id=3的直线,将直线中的Y和Quantity相加,结果是0.5,大于0,所以保留 - 因为
4 < x不正确,所以没有更多的行,所以 Y 是 0.5
【问题讨论】:
-
您使用的是哪个版本的 MySQL?
-
你能编辑你的问题吗 - 把工作放在那里,可能更清楚
-
我头疼:-(
-
这个东西如果通过一些编程/编码计算会更好。用 sql 做这件事对我来说听起来不合适。我仍然觉得它很有趣并尝试通过 sql 来完成
-
似乎是程序计算而不是关系..所以建议应该使用服务器端编程代码来完成
标签: mysql sql mariadb recursive-query