You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修复Dune Analytics中代币持有者历史按日期查询的SQL语句

修复后的Dune Analytics代币每日持有者查询

原查询的核心问题是:它只统计了当天发生过转账的账户,而非当日结束时实际持有代币的账户,这和你要的「持有者历史数据」逻辑不符。以下是修正后的查询:

WITH daily_balances AS (
    SELECT
        DATE_TRUNC('day', evt_block_time) AS date,
        account,
        SUM(CASE WHEN evt_type = 'Transfer' THEN value ELSE -value END) AS daily_change
    FROM (
        -- 转出记录:从from地址减去金额
        SELECT
            evt_block_time,
            "from" AS account,
            -CAST(value AS NUMERIC) AS value,
            'Transfer' AS evt_type
        FROM erc20."ERC20_evt_Transfer"
        WHERE contract_address = '0x430ef9263e76dae63c84292c3409d61c598e9682'
        
        UNION ALL
        
        -- 转入记录:给to地址加上金额
        SELECT
            evt_block_time,
            "to" AS account,
            CAST(value AS NUMERIC) AS value,
            'Transfer' AS evt_type
        FROM erc20."ERC20_evt_Transfer"
        WHERE contract_address = '0x430ef9263e76dae63c84292c3409d61c598e9682'
    ) AS transfers
    GROUP BY date, account
    
    -- 计算累计余额,得到每日每个地址的最终余额
), cumulative_balances AS (
    SELECT
        date,
        account,
        SUM(daily_change) OVER (PARTITION BY account ORDER BY date) AS balance
    FROM daily_balances
)

-- 统计每日余额大于0的地址数量
SELECT
    date,
    COUNT(DISTINCT account) AS num_holders
FROM cumulative_balances
WHERE balance > 0
GROUP BY date
ORDER BY date;

关键修正点:

  • 同时追踪转入和转出记录,计算每个地址的每日余额变化
  • 使用窗口函数计算累计余额,确定当日结束时的实际持有情况
  • 只统计余额大于0的地址,才是真正的代币持有者

内容的提问来源于stack exchange,提问作者Gray Atreides

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:32:09