如何在每笔交易后显示总金额?如何储存?

How to show total amount after each transaction? How it can be stored?

在数据库中有一个 table 存储硬币的交易记录。

看起来像这样:

Id UserId ChangeInBalance Created
1 5 10 2021-09-08 12:00
2 5 -6 2021-09-08 12:30
3 5 -3 2021-09-08 12:35

我需要在 UI 中显示这些交易,每行显示“总金额”,如下所示:

ChangeInBalance Created Total
10 2021-09-08 12:00 10
-6 2021-09-08 12:30 4
-3 2021-09-08 12:35 1

这个问题的常见解决方案是什么?要在每个 table 插入时添加“TotalAmount”列和 calculate/store(我认为可能会出现并发问题)?或者在程序代码中计算总金额(因为交易是在页面中查询的,所以这应该不是问题)?或者有其他更好的解决方案?

非常感谢您!

我知道这可能是一个重复的问题,但我很难找到所需的答案,尽管我认为这个问题非常普遍(也许我不擅长谷歌搜索,抱歉 :( ))。

您可以按如下所示的方式使用求和等窗口函数

create table trx (Id    int, UserId int,    ChangeInBalance int,    Created datetime);
insert into trx values 
 (1,    5,  10, '2021-09-08 12:00')
,(2,    5,  -6, '2021-09-08 12:30')
,(3,    5,  -3, '2021-09-08 12:35');

select *, 
sum(changeinbalance) over (partition by userid order by created asc) as total
from trx

你可以使用如下求和分析函数

select UserId,ChangeInBalance,Created, Sum(ChangeInBalance) over (partition by UserId order by Created) as Total
from table name 

有关更多示例,请参阅 https://cloud.google.com/bigquery/docs/reference/standard-sql/analytic-function-concepts#compute_a_cumulative_sum

您不必添加 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 因为它是由某些数据库自动完成的