在SQL中针对特定ID的求和值查找行

时间:2018-06-30 10:56:43

标签: sql sql-server database tsql

我有一个如下表–

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

1 个答案:

答案 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