事务数据的窗口函数查询

时间:2018-04-09 16:09:12

标签: sql amazon-redshift window-functions

这是我在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

0 个答案:

没有答案