这是我在redshift中的ethereum_transaction_receipts
表:
CREATE TABLE "crypto_blockchains"."ethereum_transaction_receipts" (
"hash" character varying(256),
"block_number" bigint,
"tx_time" timestamp without time zone,
"event_generator_address" character varying(256),
"event_hash" character varying(256),
"event_decoded" character varying(256),
"event_param_1" character varying(256),
"event_param_2" character varying(256),
"data" text,
"token_from" character varying(256),
"token_to" character varying(256),
"token_amount" numeric(38,5)
)
tx_time
是交易时间,token_from
来自地址,token_to
来自地址,token_amount
是交易金额。我希望每天为每个用户提供余额快照。
例如:如果A中有一个交易 - > B在2017-01-01而另一个在A - > B在2018-04-09,我希望A和B的余额的最小和最大日期之间的每个日期都有条目。
我已尝试此查询以获取token amount
用户token from
的总和,同样我可以为token amount
用户计算token to
的总和并加入并减去获取输出,但此查询为每个事务提供了一行,而且我也没有获得在特定日期之后停止进行交易的用户的详细信息。
select
date(tx_time) as date,
token_from as addr,
sum(nullif(token_amount,null)) over (partition by event_generator_address, token_from order by tx_time rows unbounded preceding) as amt
from crypto_blockchains.ethereum_transaction_receipts
where event_decoded = 'Transfer'
是否有更好的方法来使用窗口函数计算每天的余额。
编辑1: 样本数据:
token to,token from,token amount,tx_time
A,B,0.4,1/1/17
B,A,0.4,1/3/17
期望的结果:
user,balance,date
A,0,1/1/17
A,0.4,1/2/17
A,0,1/3/17
B,0,1/1/17
B,-0.4,1/2/17
B,0,1/3/17