--Token Contract Address为Token合约地址
--decimals 为Token的精度,在以太坊浏览器中查询
--Wallet Address为对应的钱包地址
SELECT
Wallet_Address
,total_day.stat_date as stat_date
,sum(distinct total_amount/power(10,{{decimals}})) as total_amount_cnt
from
(
SELECT generate_series('2021-01-01'::TIMESTAMP, date_trunc('hour', NOW()), '1 hour') AS stat_date-- Generate all days since the first contract
)total_day
join
(
SELECT
stat_date
,replace(cast(Wallet_Address as varchar),'\\','0') as Wallet_Address
,sum(amount) as total_amount
FROM
(
SELECT
date_trunc('hour', evt_block_time) AS stat_date
,"from" AS Wallet_Address
, -SUM(value) AS amount
FROM erc20."ERC20_evt_Transfer"
WHERE contract_address = CONCAT('\\x', substring('{{Token Contract Address}}' from 3))::bytea -- Token address
GROUP BY 1,2
UNION ALL
SELECT
date_trunc('hour', evt_block_time) AS DAY
,"to" AS Wallet_Address
, SUM(value) AS amount
FROM erc20."ERC20_evt_Transfer"
WHERE contract_address = CONCAT('\\x', substring('{{Token Contract Address}}' from 3))::bytea -- Token address
GROUP BY 1,2
) to_from
where Wallet_Address = CONCAT('\\x', substring('{{Wallet Address}}' from 3))::bytea -- Token address
GROUP BY 1,2
) total_trans
ON total_trans.stat_date <= total_day.stat_date
group by 1,2
order by
1,2