我有一个表,其中包含如下示例数据:
| ID | A | B |
-----------------------
| 1 | 100 | 100 |
| 2 | 200 | 80 |
| 3 | 500 | 0 |
| 4 | 800 | 0 |
目标是我想要一个SQL查询,我可以输入一个值并获取a和b之间的差之和的行,例如
示例1.
如果输入110
由于(100-100(+(200-80(=120和110<=,我将获得ID为2的前两行120
示例2.
如果输入150由于(100-100(+(200-80(+(500-0(=620和150<620
示例3。如果输入620
,由于(100-100(+(200-80(+(500-0(=620和620<=620
示例4.
如果输入1000
由于(100-100(+(200-80(+(500-0(+(800-0(=1420 AND 1000<=,我将得到id为2,3,4的行1420
我引用了来自的查询总和子集查询
答案很接近,但结果仍然不能满足我的设想。我可以知道有谁知道解决这个问题的声明是什么吗?
由于MySQL 8.0,您可以使用窗口函数来解决问题,例如:
select * from (
-- get rolling sum for columns A & B
select
id,
A,
B,
SUM(A-B) over(order by ID) as rsum
from test
) sums
-- filter rows by value
having rsum <= 620
;
示例