如何反转所有用户交易以获得 SQL 中上一日期的余额

How to reverse all users transactions to get the balance from previous date in SQL

我正在尝试撤销用户完成的所有交易,以显示他们在特定日期的余额情况 如果他们进行了任何交易查询应该获取投标金额并将其添加到用户的每一天。

Users Table
current
+---------------------------------------+
| user_id |  name   | account_balance  |
+------+--------+------------------+
|     1    |  Wells  |    1.00          |
|     2    |  John   |    10.00         |
|     3    |  Sahar  |    -5.00         |
|     4    |  Peter  |    1.00          |
+-----+--------+------------------+

Transactions table
+---------------------+-------------+----------------------+--------------------+
|     trans_id        |   user_id   |   amount_tendered    |   trans_date       |
+---------------------+-------------+----------------------+--------------------+
|          1          |      1      |         2.00         |   2020-12-14       |
|          2          |      2      |         4.00         |   2020-12-14       |
|          3          |      3      |         5.00         |   2020-12-15       |
|          4          |      4      |         6.00         |   2020-12-15       |
---------------------------------------------------------------------------------


接下来,我需要了解截至该数据 2020-12-13 的余额情况 预期结果。

as of 2020-12-13
+-------------------------------------------------------+
| user_id       |  total_spent       | account_balance  |
+---------------+--------------------+------------------+
|     1         |   2.00             |    3.00          |
+---------------+--------------------+------------------+
|     2         |   4.00             |    14.00         |
+---------------+--------------------+------------------+
|     3         |   5.00             |     0.00         |
+---------------+--------------------+------------------+
|     4         |   6.00             |    7.00          |
+---------------+--------------------+------------------+

您可以在子查询中计算给定日期后每个用户的总花费,然后将其与用户 table 合并并进行数学计算:

select u.user_id, t.total_spent, 
    u.account_balance + coalesce(t.total_spent, 0) as account_balance
from users u
left join (
    select user_id, sum(amount_tendered) as total_spent
    from transactions
    where trans_date >= '2020-12-13'
    group by user_id
) t on t.user_id = u.user_id