迭代列中的值

时间:2017-05-25 20:05:22

标签: sql postgresql running-total

我想迭代一个带有数值的列,并按我的方式对这些值求和,然后返回相应的ID和到目前为止的总和。所有这些都应该基于日期的升序

我的表格似乎是

id | money | date
---------- | ----------
01 | 2300  | 01/03/2017
02 | 35    | 01/01/2017
03 | 70    | 01/02/2017

所以我的结果是 -

id | money
----------
02 | 35
03 | 105
01 | 2405

从那里开始,我想只返回总和小于或等于一个值的id,所以假设值为2400,我的表结果将是 -

id 
---
02 
03

我写了一个查询 -

SELECT id 
FROM tableName
WHERE 2400 >=
    (SELECT id, SUM(money)
    FROM tableName
    WHERE money IS NOT NULL
    GROUP BY id) WHERE EXISTS
        (SELECT * 
        FROM tableName
        WHERE date ASC));

我明白我只是在汇总钱,然后将一个整数与该数字进行比较,但我如何在一个查询中动态地执行此操作?我是否必须进行for循环?

1 个答案:

答案 0 :(得分:0)

您可以使用sum函数的窗口变量来获取总计:

SELECT id
FROM   (SELECT id, SUM(money) OVER (ORDER BY date ASC) AS money
        FROM   monies) t 
WHERE  money <= 2400