Sử dụng LAG
chức năng phân tích:
SELECT "Date",
GREATEST(
account_balance - LAG(account_balance, 1, 0) OVER (ORDER BY "Date"),
0
) AS credit,
GREATEST(
LAG(account_balance, 1, 0) OVER (ORDER BY "Date") - account_balance,
0
) AS debit,
account_balance
FROM table_name
Mà, đối với dữ liệu mẫu:
CREATE TABLE table_name ( "Date", account_balance ) AS
SELECT Date '2021-01-01', +1000 FROM DUAL UNION ALL
SELECT Date '2021-01-02', + 500 FROM DUAL UNION ALL
SELECT Date '2021-01-03', - 200 FROM DUAL;
Kết quả đầu ra:
Để tính toán theo hướng ngược lại:
SELECT "Date",
credit,
debit,
SUM(credit-debit) OVER (ORDER BY "Date") AS account_balance
FROM table_name
Mà, đối với dữ liệu mẫu:
CREATE TABLE table_name ( "Date", credit, debit ) AS
SELECT Date '2021-01-01', 1000, 0 FROM DUAL UNION ALL
SELECT Date '2021-01-02', 0, 500 FROM DUAL UNION ALL
SELECT Date '2021-01-03', 0, 700 FROM DUAL;
Kết quả đầu ra:
db <> fiddle tại đây