# Dune简易学习笔记-入门基础语句

By [Untitled](https://paragraph.com/@0x6b612bc2d25b7d5974b017c933d57a5dcd82e611) · 2024-05-30

---

> 本篇是dune的学习笔记, 意在记录自己的学习过程,通过输出的形式来回顾学习成果. 另一方面也是希望借鉴@gm365博主的建议来实践learn in public.

学习目的
----

大致了解dune的基本使用方法, 了解SQL的语法. 能自己写简单的Query语句.

* * *

1\. 基本知识
--------

> 直接用@gm365博主写的,可参考

[https://mirror.xyz/gm365.eth/OE\_CGx6BjCd-eQ441139sjsa3kTyUsmKVTclgMv09hY](https://mirror.xyz/gm365.eth/OE_CGx6BjCd-eQ441139sjsa3kTyUsmKVTclgMv09hY)

2\. 简单的查询语句
===========

### 2.1 第一条查询语句

查询区块上的10笔交易

    select * from ethereum.transactions limit 10
    

![](https://storage.googleapis.com/papyrus_images/a60c3fe868da6c396f4d9bea9e5da424fd1869f0f3cb1baa1a4557fe679bf61b.png)

### 疑问:

*   **我发现每次运行上面的代码得到的数据不一样,于是我尝试加上限制”按照区块降序来”但是运行起来非常慢,以至于超出时间限制.(--代解决--)**
    

    select * 
    from ethereum.transactions 
    order by "block_time" desc 
    limit 5;
    

### 2.2 稍微复杂一点的

1.  查询v神钱包的链上交易信息:查询最新前10条信息,用降序desc. 如果要查最早的10条可用asc升序排列
    

_这里_`where “from`_似乎的改了规则, 可直接用地址表示且不加双引号“_

    SELECT * 
    FROM ethereum.transactions 
    where"from" = 0x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6
    ORDER BY "block_time" DESC --按照降序查询,最新的在前面,asc则为升序
    LIMIT 10 --限制显示10条信息
    

![order by "block_time" asc](https://storage.googleapis.com/papyrus_images/d3d10ef53f2eed343f381c1f9ece6d19c79153352d141b935b26b4947ae6897d.png)

order by "block\_time" asc

  
2\. 查询此钱包转出金额的数量

*   `value / 1e18 AS "value"`：选择 `value` 列，将其除以 1e18（即10的18次方）来换算为以太坊的单位（ETH），并将其重命名为 `value`。
    
*   `value / 1e18 > 0.1`：过滤条件，选择转账金额大于0.1 ETH的交易。
    
*   按照 `block_time` 列进行升序排序，即最早的交易记录排在最前面。
    

    select block_time as "date",
    value/1e18 as "value" -- value是换算后的单位
    from ethereum.transactions
    where "from" = 0x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6 --从此钱包发出的交易
    and value/1e18 > 0.1 -- 转账金额大于0.1 ETH
    order by "block_time" asc-- 按照区块时间倒序排序
    

![](https://storage.googleapis.com/papyrus_images/62adc72c2f02a958632dd54e994fcaebf68cdd2bd2662f154cb7b3ab4a559e53.png)

查询v神钱包接收eth的数量则把from改为**to;**

    select block_time as "date",
    value/1e18 as "value" -- value是换算后的单位
    from ethereum.transactions
    where "to" = 0x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6 --从此钱包发出的交易
    and value/1e18 > 0.1 -- 转账金额大于0.1 ETH
    order by "block_time" asc-- 按照区块时间倒序排序
    

### 疑问:

### 这些查询只是统计eth代币的转账事件吗? 如果转移其他代币且代币的价值大于0.1eth是否会被统计在内?

ChatGPT解答:

这些查询只统计了以太坊（ETH）的转账事件，不包括其他代币的转移,为了统计某个钱包接收的代币（ERC-20 或其他类型代币）且这些代币的价值大于0.1 ETH，你需要查询与代币转移相关的交易记录，并可能需要结合代币价格数据进行换算。

ethereum.token\_transfers结构如下:

*   `block_time`: 时间戳
    
*   `from`: 发送地址
    
*   `to`: 接收地址
    
*   `token_address`: 代币合约地址
    
*   `value`: 转移的代币数量
    
*   `token_price_eth`: 代币当前价格（以 ETH 计）
    

    SELECT 
      block_time AS "date",
      value * token_price_eth AS "value_eth", -- 将代币数量乘以其价格，换算为 ETH 价值
      token_address -- 代币合约地址
    FROM 
      ethereum.token_transfers
    WHERE 
      "to" = '0x1Db3439a222C519ab44bb1144fC28167b4Fa6EE6' -- 接收地址为 V神钱包
      AND value * token_price_eth > 0.1 -- 转账价值 > 0.1 ETH
    ORDER BY 
      block_time DESC -- 按照区块时间倒序排序
    

**未完待续:后面学习图表的使用**

总结:
---

要熟悉常用数据表常见结构, 可边学边用. 可以copy别人代码直接用, 但一定要多举一反三, 联想下其他条件该如何使用. 毕竟这是别人嚼碎的知识, copy知识被动在吸纳, 并未在自己脑海里产生神经元.

感谢[@gm365](https://x.com/gm365)老师的鼓励, 再接再厉,

参考内容:

[https://mirror.xyz/gm365.eth/OE\_CGx6BjCd-eQ441139sjsa3kTyUsmKVTclgMv09hY](https://mirror.xyz/gm365.eth/OE_CGx6BjCd-eQ441139sjsa3kTyUsmKVTclgMv09hY)

---

*Originally published on [Untitled](https://paragraph.com/@0x6b612bc2d25b7d5974b017c933d57a5dcd82e611/dune)*
