Dune Analytics中关联每日BNB价格的SQL查询求助
Dune Analytics SQL查询:关联交易数据与BNB每日价格
你的问题核心是BNB_Data CTE未提取日期字段,导致无法和交易数据的日期做关联匹配。另外需要确保BNB价格数据按日聚合,避免单日内多条价格数据造成结果重复。
以下是修正后的完整SQL代码:
WITH Drip_Data AS ( SELECT DATE_TRUNC('day', evt_block_time) AS day, "token_amount" / 1e18 AS "No. Drip Tokens Sold", "bnb_amount" / 1e18 AS "BNB Received" FROM drip."fountain_evt_onBnbPurchase" WHERE buyer = '\xFdD4D2e4e3b344429107590c20BCf4B88281Da33' ), BNB_Data AS ( SELECT -- 假设bnb_price表含timestamp字段,按日截断;若表本身有day列可直接使用 DATE_TRUNC('day', timestamp) AS day, -- 取当日平均BNB价格,也可改用MAX/MIN/LAST_VALUE取收盘价,按需调整 AVG(BNB_USD_PRICE) AS "BNB Price (on that day)" FROM dune_user_generated."bnb_price" GROUP BY DATE_TRUNC('day', timestamp) ) SELECT dd.day AS "DATE", dd."No. Drip Tokens Sold", dd."BNB Received", bd."BNB Price (on that day)" FROM Drip_Data dd INNER JOIN BNB_Data bd ON dd.day = bd.day;
关键说明:
- 日期关联:两个CTE都通过
DATE_TRUNC('day', ...)生成统一格式的日期字段,作为JOIN的匹配条件 - 价格聚合:对BNB价格按日做聚合(示例用AVG),确保单日仅一条价格数据,避免JOIN后结果膨胀
- 字段命名:直接在CTE中定义最终需要的列名,简化主查询写法
- JOIN类型:若部分日期无BNB价格数据但想保留交易记录,可改用
LEFT JOIN,此时价格列会显示为NULL
内容的提问来源于stack exchange,提问作者Sasha Gorgov
相关产品推荐
相关产品推荐

