根据日期从以前的金额计算余额?

Calculating the balance from the previous amount based on DATE?

我有一个 table,其中包含每个用户的交易金额。我正在尝试查询还显示 'balance' 列的 table。

所以在上图中,我按日期排序,现在,我想要另一列来计算余额。因此,在余额列中,从最后一条记录(最早的记录)开始,该行将从 $150 开始,然后下一行将计算当前金额 - 之前的金额。

所以它应该看起来像这样:

有办法吗?

因此,对于数据的 CTE,您可以使用 SUM 的 WINDOW FUNCTUON 版本来获得您想要的结果。

WITH data(number_id, value, date) AS (
    SELECT column1, column2, to_date(column3, 'YYYY-MM-DD') FROM VALUES
    (1, 10, '2022-01-01'),
    (1, 20, '2022-01-02'),
    (1, 30, '2022-01-04'),
    (1, 40, '2022-01-07'),
    (2, 110, '2022-01-01'),
    (2, 120, '2022-01-02'),
    (2, 130, '2022-01-04'),
    (2, 140, '2022-01-07')
)
SELECT number_id
    ,value
    ,sum(value)over(partition by number_id order by date rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) as balance
    date
FROM data
ORDER BY 1, 4;

给出:

NUMBER_ID VALUE BALANCE DATE
1 10 10 2022-01-01
1 20 30 2022-01-02
1 30 60 2022-01-04
1 40 100 2022-01-07
2 110 110 2022-01-01
2 120 230 2022-01-02
2 130 360 2022-01-04
2 140 500 2022-01-07

用你的数字(72更正为-72):

WITH data(number_id, value, date) AS (
    SELECT column1, column2, to_date(column3, 'YYYY-MM-DD') FROM VALUES
    (111, -22, '2021-12-24'),
    (111, 22, '2021-12-23'),
    (111, -10, '2021-12-22'),
    (111, -30, '2021-12-21'),
    (111, 5, '2021-12-20'),
    (111, -48, '2021-12-19'),
    (111, 5, '2021-12-18'),
    (111, -72, '2021-12-17'),
    (111, 150, '2021-12-16')
)
SELECT number_id
    ,value
    ,sum(value)over(partition by number_id order by date rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) as balance
    ,date
FROM data
ORDER BY 1, 4 DESC;

给出:

NUMBER_ID VALUE BALANCE DATE
111 -22 0 2021-12-24
111 22 22 2021-12-23
111 -10 0 2021-12-22
111 -30 10 2021-12-21
111 5 40 2021-12-20
111 -48 35 2021-12-19
111 5 83 2021-12-18
111 -72 78 2021-12-17
111 150 150 2021-12-16