升序总和 sql Oracle

Ascending sum sql Oracle

我的查询有问题sql

SELECT 
ID_TRANSACTION AS id,
PAID_AMOUNT_PLN AS paid_amount,
D_PAYMENT
FROM AB 
--WHERE D_PAYMENT <= '20190808'
)

我希望查询根据条件 D_PAYMENT <= 'data' 根据 D_PAYMENT 计算总和 也就是说,如果 D_PAYMENT <= 20190731 那么 362.07 如果 D_PAYMENT <= 20190808 那么 362,07 + 87,48 等等

任何人都可以帮助我如何做到这一点?

使用 GROUP BY 然后 SUMD_PAYMENT 列过滤后的金额:

SELECT id_transaction AS id,
       SUM( paid_amount_plan ) AS paid_amount,
       MAX( d_payment ) AS d_payment
FROM   ab
WHERE  d_payment <= DATE '2019-08-09'
GROUP BY id_transaction;

其中,对于示例数据:

CREATE TABLE ab (
  id_transaction   VARCHAR(20),
  paid_amount_plan NUMERIC(5,2),
  d_payment        DATE
);
INSERT INTO ab ( id_transaction, paid_amount_plan, d_payment )
VALUES ( '0009015890', 362.07, DATE '2019-07-31' );
INSERT INTO ab ( id_transaction, paid_amount_plan, d_payment )
VALUES ( '0009015890', 87.48, DATE '2019-08-08' );
INSERT INTO ab ( id_transaction, paid_amount_plan, d_payment )
VALUES ( '0009015890', 304.96, DATE '2019-08-12' );

输出:

        ID | PAID_AMOUNT |  D_PAYMENT
---------: | ----------: | ---------:
0009015890 |      449.55 | 2019-08-08

或者,如果您需要所有行,请使用分析函数:

SELECT id_transaction AS id,
       SUM( paid_amount_plan )
         OVER ( PARTITION BY id_transaction ORDER BY d_payment )
         AS paid_amount,
       d_payment
FROM   ab
WHERE  d_payment <= DATE '2019-08-09';

输出:

        ID | PAID_AMOUNT |  D_PAYMENT
---------: | ----------: | ---------:
0009015890 |      362.07 | 2019-07-31
0009015890 |      449.55 | 2019-08-08

DB2 数据库<>fiddle here

Oracle 数据库<>fiddle here