我有一个如下表–
Id| Amount|DateAdded |
--|-------|-----------|
1 20 20-Jun-2018
1 10 05-Jun-2018
1 4 21-May-2018
1 5 15-May-2018
1 15 05-May-2018
2 25 15-Jun-2018
2 25 12-Jun-2018
2 65 05-Jun-2018
2 65 20-May-2018
在这里,如果我将Id的金额总计= 1,那么我将得到54作为总和结果。我想找到Id = 1的行,其总和不大于精确值35或任何给定值
在给定值为35的情况下,id = 1的预期输出应为-
Id| Amount|DateAdded |
--|-------|-----------|
1 20 20-Jun-2018
1 10 05-Jun-2018
1 4 21-May-2018
1 5 15-May-2018
在给定值为50的情况下,Id = 2的预期输出应为-
Id| Amount|DateAdded |
--|-------|-----------|
2 25 15-Jun-2018
2 25 12-Jun-2018
答案 0 :(得分:2)
您将使用累计和。要获取所有行:
select t.*
from (select t.*,
sum(amount) over (partition by id order by dateadded) as running_amount
from t
) t
where t.running_amount - amount < 35;
仅获取通过标记的行:
where t.running_amount - amount < 35 and
t.running_amount >= 35