升序总和 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
然后 SUM
在 D_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
我的查询有问题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
然后 SUM
在 D_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