加密交易员常用的技术指标
如果心中没有正确圣杯的模样,那么你会误将错误当作真理或在错误方向上去寻找真理。加密货币交易也是如此,当第一次看加密货币价格图时,这么多数字、线条和颜色,可能会有困惑,显得不知所措,但这些指标确实可以帮助交易者和投资者做出选择。 编译 | Bite@火星财经APP 原文标题《一文看懂技术控的交易“圣杯”》 本章介绍到交易员最常用的交易指标,以及它们的功能,并解释如何通过使用最佳的加密交易指标来定位,告诉交易“圣杯”的大致模样,使自己在加密市场中保持领先。1. 什么是加密货币交易指标?简单来说,交易指标是交易员用来衡量市场情绪的工具,这种指标可以用于不同市场,例如股票、外汇,当然还有加密货币。虽然很多加密交易员只是简单地进行长期交易,但交易需要众多数据点,并以此为基础进行决策,依靠情绪进行交易绝不是长久之计。这就是为什么交易指标已经成为所有类型交易员,包括加密货币交易员的基本工具。因此,加密货币交易指标只是加密货币背景下的常规技术分析交易指标。当某项资产经历了长时间的价格上涨,市场往往将其视为该资产超买的信号。同样,长时间的下跌势头也可能表明某项资产已被超卖。这些通常是交易者在进入市...
通过wise拥有一个美国checking账号和虚拟Debit card
因为海外流媒体和订阅服务的需求,有的时候会需要各地区的银行账号,各种服务也申请尝试了很多,今天介绍个我比较满意的转账服务平台wise数字银行 转账收款非常方便Wise虚拟卡可以无限重开,但每天最多可以创建 3 次新的虚拟卡。当您生成一组新的卡详细信息时,旧的卡详细信息将停止工作,如果是英国区,则每天只能创建 1 张虚拟卡。 如果只是自己使用,可以通过冻结的方式来保证资金安全wise是什么Wise(前称TransferWise)是一家英国金融科技公司,为全球个人和企业提供低成本、透明和公平的汇款服务。 Wise拥有1500多万客户,每月处理90亿英镑的国际汇款。除了汇款服务,Wise还向指定地区的客户提供免费的Wise帐户和免年费的借记卡。 Wise帐户支持同时持有50多种货币,当中有多达9-10种是附有个人名下的银行帐号,方便收款和付款。借记卡连结外币帐户余额,可在全球VISA或Mastercard网络的商户和ATM使用,节省海外交易费用。最主要的,支持直接提现到国内支付宝账户。而且采用的是实时汇率Wise能保证不会在汇率中隐藏任何费用,并会明确告知客户手续费的计算方式,这一点是...
MVRV Z-Score:找出比特币的公平价格 定期定额抄底工具
MVRV Z评分 是一种有用的指标,可以让您了解任何加密货币的价值,但最常用于比特币。 MVRV 代表市场价值到实现价值,显示加密货币目前是被高估还是被低估。 当人们谈论比特币时,最常讨论的问题之一是:“它值多少钱?”。 由于比特币的价值主要是由供求关系决定的,所以这个问题没有简单的答案。 要确定比特币的公允价值,需要仔细考虑几个因素。 MVRV Z-score 可以稍微简化所有这些计算。 MVRV Z 分数如何运作? 查看我们的指南,了解什么是 MVRV Z 分数以及如何使用它来估算比特币的价值。 什么是 MVRV Z 分数? 该指标起源于 Murad Makhmudov 和 David Pewell 在 2018 年创建的 MVRV 比率。 最初的 MVRV 比率只是简单地比较了比特币的市场价值和实现价值。 这是跟踪价格行为的好方法,但它并没有提供对比特币公允价值的深刻理解。 MVRV Z-score 是对原始 Makhmudov 和 Pewell 度量的修改。 MVRV Z 分数指标最初由 Awe & Wonder 于 2018 年底创建,将 Z 分数的数学概念添加到 MV...
All kinds of things are recorded, messy, seen and heard. Mixed together to witness the past, looking back can find a lot of fun. growing up
加密交易员常用的技术指标
如果心中没有正确圣杯的模样,那么你会误将错误当作真理或在错误方向上去寻找真理。加密货币交易也是如此,当第一次看加密货币价格图时,这么多数字、线条和颜色,可能会有困惑,显得不知所措,但这些指标确实可以帮助交易者和投资者做出选择。 编译 | Bite@火星财经APP 原文标题《一文看懂技术控的交易“圣杯”》 本章介绍到交易员最常用的交易指标,以及它们的功能,并解释如何通过使用最佳的加密交易指标来定位,告诉交易“圣杯”的大致模样,使自己在加密市场中保持领先。1. 什么是加密货币交易指标?简单来说,交易指标是交易员用来衡量市场情绪的工具,这种指标可以用于不同市场,例如股票、外汇,当然还有加密货币。虽然很多加密交易员只是简单地进行长期交易,但交易需要众多数据点,并以此为基础进行决策,依靠情绪进行交易绝不是长久之计。这就是为什么交易指标已经成为所有类型交易员,包括加密货币交易员的基本工具。因此,加密货币交易指标只是加密货币背景下的常规技术分析交易指标。当某项资产经历了长时间的价格上涨,市场往往将其视为该资产超买的信号。同样,长时间的下跌势头也可能表明某项资产已被超卖。这些通常是交易者在进入市...
通过wise拥有一个美国checking账号和虚拟Debit card
因为海外流媒体和订阅服务的需求,有的时候会需要各地区的银行账号,各种服务也申请尝试了很多,今天介绍个我比较满意的转账服务平台wise数字银行 转账收款非常方便Wise虚拟卡可以无限重开,但每天最多可以创建 3 次新的虚拟卡。当您生成一组新的卡详细信息时,旧的卡详细信息将停止工作,如果是英国区,则每天只能创建 1 张虚拟卡。 如果只是自己使用,可以通过冻结的方式来保证资金安全wise是什么Wise(前称TransferWise)是一家英国金融科技公司,为全球个人和企业提供低成本、透明和公平的汇款服务。 Wise拥有1500多万客户,每月处理90亿英镑的国际汇款。除了汇款服务,Wise还向指定地区的客户提供免费的Wise帐户和免年费的借记卡。 Wise帐户支持同时持有50多种货币,当中有多达9-10种是附有个人名下的银行帐号,方便收款和付款。借记卡连结外币帐户余额,可在全球VISA或Mastercard网络的商户和ATM使用,节省海外交易费用。最主要的,支持直接提现到国内支付宝账户。而且采用的是实时汇率Wise能保证不会在汇率中隐藏任何费用,并会明确告知客户手续费的计算方式,这一点是...
MVRV Z-Score:找出比特币的公平价格 定期定额抄底工具
MVRV Z评分 是一种有用的指标,可以让您了解任何加密货币的价值,但最常用于比特币。 MVRV 代表市场价值到实现价值,显示加密货币目前是被高估还是被低估。 当人们谈论比特币时,最常讨论的问题之一是:“它值多少钱?”。 由于比特币的价值主要是由供求关系决定的,所以这个问题没有简单的答案。 要确定比特币的公允价值,需要仔细考虑几个因素。 MVRV Z-score 可以稍微简化所有这些计算。 MVRV Z 分数如何运作? 查看我们的指南,了解什么是 MVRV Z 分数以及如何使用它来估算比特币的价值。 什么是 MVRV Z 分数? 该指标起源于 Murad Makhmudov 和 David Pewell 在 2018 年创建的 MVRV 比率。 最初的 MVRV 比率只是简单地比较了比特币的市场价值和实现价值。 这是跟踪价格行为的好方法,但它并没有提供对比特币公允价值的深刻理解。 MVRV Z-score 是对原始 Makhmudov 和 Pewell 度量的修改。 MVRV Z 分数指标最初由 Awe & Wonder 于 2018 年底创建,将 Z 分数的数学概念添加到 MV...
All kinds of things are recorded, messy, seen and heard. Mixed together to witness the past, looking back can find a lot of fun. growing up

Subscribe to distracting-thoughts

Subscribe to distracting-thoughts
<100 subscribers
<100 subscribers
Share Dialog
Share Dialog


**1、数据仓库是什么?**说人话就是说就是出于数据统计的需要,把一些数据分门别类地存储起来,存储的载体是【数据表】。针对某一个或者一些主题的一系列【数据表】合在一起就是数据仓库。注意: 这里的数据可以是结果数据(比如Uniswap上线以来某个交易对每天的交易量统计) 也可以是过程数据(Uniswap上线以来某个交易对发生的每一条交易记录明细:谁发起的,用A换B,交易时间,tx_hash,交易数量….)。
**2、SQL是什么?**假设你想吃脆香米巧克力,但是你这会儿出不了门,你就叫个跑腿说:我需要一盒巧克力,他的牌子是脆香米。跑腿去了趟超市把巧克力买来送到你家。 类比过来SQL就是你说的那句话,Dune Analytics就是个跑腿儿,他可以让你可以跟数据仓库对话,并且将数据仓库里的数据给你搬出来给你。SQL最基本的结构或者语法就3个模块,几乎所有的SQL都会包含这3个部分:
select: 取哪个字段?from:从哪个表里取?where:限制条件是什么?
**3、数据表长什么样?**你可以认为表就是一个一个的Excel 表,每一个Excel 表里存的不同的数据。以ethereum.transactions(以太坊上的transactions记录)为例:

顺便说下表里用比较多的几个字段
block_time:交易被打包的时间
block_number:交易被打包的区块高度
value:转出了多少ETH(需要除以power(10,18)来换算精度)
from:ETH从哪个钱包转出的
to: ETH转到了哪个钱包
hash:这个transaction的tx hash
success:transaction是否成功
案例1:我想看看孙哥钱包(0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296)在2022年1月份以来的每一笔ETH的大额转出(>1000ETH)是在什么时候以及具体的转出数量
select --Select后跟着需要查询的字段,多个字段用英文逗号分隔
block_time
,"from"
,"to"
,hash
,value /power(10,18) as value --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 --限制孙哥的钱包
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc

https://dune.com/queries/1523799
SELECT
SELECT后边跟着,需要查询的字段,多个字段用英文逗号隔开
FROM
FROM 后边跟着数据来源的表
WHERE
WHERE后跟着对数据的筛选条件
运算符:and / or
如果筛选条件条件有多个,可以用运算符来连接
and:多个条件取并集
or:多个条件取交集
排序:order by [字段A] ,按照字段A升序排列,如果需要按照降序排列就在末尾加上 desc
幂乘计算:用于换算Value的精度,函数是Power(Number,Power),其中number表示底数;power表示指数
字符串中字母换算大小写
lower():字符串中的字母统一换成小写
upper():字符串中的字母统一换成大写
案例2:表里都是明细数据,我不想看细节,我只想通过一些统计数据去了解概况
select
sum( value /power(10,18) ) as value --对符合要求的数据的value字段求和
,max( value /power(10,18) ) as max_value --求最大值
,min( value /power(10,18) ) as min_value--求最小值
,count( hash ) as tx_count --对符合要求的数据计数,统计有多少条
,count( distinct to ) as tx_to_address_count --对符合要求的数据计数,统计有多少条(按照去向地址to去重)
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) > 1000 --限制ETH Transfer量大于1000

https://dune.com/queries/1525555
聚合函数
count():计数,统计有多少个;如果需要去重计数,括号内加distinct
sum():求和
min():求最小值
max():求最大值
avg():求平均
案例3:我不想只看一个单独的数字,想分小时/天/周来看一下趋势
-- 把粒度到秒的时间转化为天/小时/分钟(为了方便后续按照天或者小时聚合)
select --Select后跟着需要查询的字段,多个字段用空格隔开
block_time --transactions发生的时间
,date_trunc('hour',block_time) as stat_hour --转化成小时的粒度
,date_trunc('day',block_time) as stat_date --转化成天的粒度
,date_trunc('week',block_time) as stat_week--转化成week的粒度
,"from"
,"to"
,hash
,value /power(10,18) as value --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2021-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc

https://dune.com/queries/1527740
DATE_TRUNC('datepart', timestamp)
时间戳的截断函数
根据datepart参数的不同会得到不同的效果
minute:将输入时间戳截断至分钟
hour:将输入时间戳截断至小时
day:将输入时间戳截断至天
week:将输入时间戳截断至某周的星期一
year:将输入时间戳截断至一年的第一天
select
date_trunc('day',block_time) as stat_date
,sum( value /power(10,18) ) as value --对符合要求的数据的value字段求和
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) > 1000 --限制ETH Transfer量大于1000
group by 1
order by 1

https://dune.com/queries/1525668
分组聚合(group by)
分组聚合的语法是group by。分组聚合顾名思义就是先分组后聚合,需要配合聚合函数一起使用。

假设上边表格是一个家庭(3个人)2020年前2个月的生活开销明细,如果你只用简单的sum,那你只能得到总计的12900;如果你想的到右边2种统计数据,那就需要用到分组聚合group by(按照【人员】分组聚合或者按照【月份】分组聚合)
案例4:我想从转出ETH的USD金额的角度去看孙哥的转出行为
select
block_time
,transactions_info.stat_minute as stat_minute
,"from"
,"to"
,hash
,eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
,price
,eth_amount * price as usd_value
from
(
select --Select后跟着需要查询的字段,多个字段用空格隔开
block_time
,date_trunc('minute',block_time) as stat_minute --把block_time用date_trunc处理成分钟,方便作为主键去关联
,"from"
,"to"
,hash
,value /power(10,18) as eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc
) transactions_info
left join --讲transactions_info与price_info的数据关联,关联方式为 left join
(
--prices.usd表里存的是分钟级别的价格数据
select
date_trunc('minute',minute) as stat_minute --把minute用date_trunc处理成分钟,方便作为主键去关联
,price
from prices.usd
where blockchain = 'ethereum' --取以太坊上的价格数据
and symbol = 'WETH' --取WETH的数据
) price_info on transactions_info.stat_minute = price_info.stat_minute --left join关联的主键为stat_minute

https://dune.com/queries/1528027
联表查询
大部分情况下我们需要的数据不是在同一张表里,比如transaction表存储的就是只有transaction数据,没有价格数据。如果我们希望能够计算出transaction对应USD 价值,那就需要用联表查询把价格数据给关联进来
联表查询可以理解为把两个表通过一定的条件关联起来形成一张虚拟的表,你可以方便地对这虚拟表做更多处理。
联表查询有2个部分构成
联表方式(join,left join ,right join ,cross join,full join)
关联条件(on)
用得最多的联表方式是join 跟left join,以这2个为例子去解释下具体的用法

- join:把两个表按照关联条件(on)关联在一起,取交集 \
Table A 跟 Table B通过姓名关联,其中交集是小红和小明,因为join是取交集,因此最终结果里姓名就只有小明和小红 \
两表中所有符合要求的数据都需要关联,因为Table B中小明有2条记录,所以关联的结果中小明也有两条数据 \
left join:以左表为主,把右表按照关联条件(on)往左表去关联,如果关联不到就用null填充 \
Table A 跟 Table B通过姓名关联,因为是以左表为主,所以尽管左表中小兰和小绿在右表中没有符合关联条件的数据,但是小兰和小绿也会出现在结果中,右表那部分因为关联不到数据,因此都用null填充

https://dune.com/queries/1528564
子查询(with as )
通过with as 可以构建一个子查询,把一段SQL的结果变成一个'虚拟表'(可类比为一个视图或者子查询),接下来的SQL中可以直接从这个'虚拟表'中取数据
通过with as 可以比较好地提高SQL的逻辑的可读性,也可以避免多重嵌套
**1、数据仓库是什么?**说人话就是说就是出于数据统计的需要,把一些数据分门别类地存储起来,存储的载体是【数据表】。针对某一个或者一些主题的一系列【数据表】合在一起就是数据仓库。注意: 这里的数据可以是结果数据(比如Uniswap上线以来某个交易对每天的交易量统计) 也可以是过程数据(Uniswap上线以来某个交易对发生的每一条交易记录明细:谁发起的,用A换B,交易时间,tx_hash,交易数量….)。
**2、SQL是什么?**假设你想吃脆香米巧克力,但是你这会儿出不了门,你就叫个跑腿说:我需要一盒巧克力,他的牌子是脆香米。跑腿去了趟超市把巧克力买来送到你家。 类比过来SQL就是你说的那句话,Dune Analytics就是个跑腿儿,他可以让你可以跟数据仓库对话,并且将数据仓库里的数据给你搬出来给你。SQL最基本的结构或者语法就3个模块,几乎所有的SQL都会包含这3个部分:
select: 取哪个字段?from:从哪个表里取?where:限制条件是什么?
**3、数据表长什么样?**你可以认为表就是一个一个的Excel 表,每一个Excel 表里存的不同的数据。以ethereum.transactions(以太坊上的transactions记录)为例:

顺便说下表里用比较多的几个字段
block_time:交易被打包的时间
block_number:交易被打包的区块高度
value:转出了多少ETH(需要除以power(10,18)来换算精度)
from:ETH从哪个钱包转出的
to: ETH转到了哪个钱包
hash:这个transaction的tx hash
success:transaction是否成功
案例1:我想看看孙哥钱包(0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296)在2022年1月份以来的每一笔ETH的大额转出(>1000ETH)是在什么时候以及具体的转出数量
select --Select后跟着需要查询的字段,多个字段用英文逗号分隔
block_time
,"from"
,"to"
,hash
,value /power(10,18) as value --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 --限制孙哥的钱包
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc

https://dune.com/queries/1523799
SELECT
SELECT后边跟着,需要查询的字段,多个字段用英文逗号隔开
FROM
FROM 后边跟着数据来源的表
WHERE
WHERE后跟着对数据的筛选条件
运算符:and / or
如果筛选条件条件有多个,可以用运算符来连接
and:多个条件取并集
or:多个条件取交集
排序:order by [字段A] ,按照字段A升序排列,如果需要按照降序排列就在末尾加上 desc
幂乘计算:用于换算Value的精度,函数是Power(Number,Power),其中number表示底数;power表示指数
字符串中字母换算大小写
lower():字符串中的字母统一换成小写
upper():字符串中的字母统一换成大写
案例2:表里都是明细数据,我不想看细节,我只想通过一些统计数据去了解概况
select
sum( value /power(10,18) ) as value --对符合要求的数据的value字段求和
,max( value /power(10,18) ) as max_value --求最大值
,min( value /power(10,18) ) as min_value--求最小值
,count( hash ) as tx_count --对符合要求的数据计数,统计有多少条
,count( distinct to ) as tx_to_address_count --对符合要求的数据计数,统计有多少条(按照去向地址to去重)
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) > 1000 --限制ETH Transfer量大于1000

https://dune.com/queries/1525555
聚合函数
count():计数,统计有多少个;如果需要去重计数,括号内加distinct
sum():求和
min():求最小值
max():求最大值
avg():求平均
案例3:我不想只看一个单独的数字,想分小时/天/周来看一下趋势
-- 把粒度到秒的时间转化为天/小时/分钟(为了方便后续按照天或者小时聚合)
select --Select后跟着需要查询的字段,多个字段用空格隔开
block_time --transactions发生的时间
,date_trunc('hour',block_time) as stat_hour --转化成小时的粒度
,date_trunc('day',block_time) as stat_date --转化成天的粒度
,date_trunc('week',block_time) as stat_week--转化成week的粒度
,"from"
,"to"
,hash
,value /power(10,18) as value --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2021-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc

https://dune.com/queries/1527740
DATE_TRUNC('datepart', timestamp)
时间戳的截断函数
根据datepart参数的不同会得到不同的效果
minute:将输入时间戳截断至分钟
hour:将输入时间戳截断至小时
day:将输入时间戳截断至天
week:将输入时间戳截断至某周的星期一
year:将输入时间戳截断至一年的第一天
select
date_trunc('day',block_time) as stat_date
,sum( value /power(10,18) ) as value --对符合要求的数据的value字段求和
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) > 1000 --限制ETH Transfer量大于1000
group by 1
order by 1

https://dune.com/queries/1525668
分组聚合(group by)
分组聚合的语法是group by。分组聚合顾名思义就是先分组后聚合,需要配合聚合函数一起使用。

假设上边表格是一个家庭(3个人)2020年前2个月的生活开销明细,如果你只用简单的sum,那你只能得到总计的12900;如果你想的到右边2种统计数据,那就需要用到分组聚合group by(按照【人员】分组聚合或者按照【月份】分组聚合)
案例4:我想从转出ETH的USD金额的角度去看孙哥的转出行为
select
block_time
,transactions_info.stat_minute as stat_minute
,"from"
,"to"
,hash
,eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
,price
,eth_amount * price as usd_value
from
(
select --Select后跟着需要查询的字段,多个字段用空格隔开
block_time
,date_trunc('minute',block_time) as stat_minute --把block_time用date_trunc处理成分钟,方便作为主键去关联
,"from"
,"to"
,hash
,value /power(10,18) as eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc
) transactions_info
left join --讲transactions_info与price_info的数据关联,关联方式为 left join
(
--prices.usd表里存的是分钟级别的价格数据
select
date_trunc('minute',minute) as stat_minute --把minute用date_trunc处理成分钟,方便作为主键去关联
,price
from prices.usd
where blockchain = 'ethereum' --取以太坊上的价格数据
and symbol = 'WETH' --取WETH的数据
) price_info on transactions_info.stat_minute = price_info.stat_minute --left join关联的主键为stat_minute

https://dune.com/queries/1528027
联表查询
大部分情况下我们需要的数据不是在同一张表里,比如transaction表存储的就是只有transaction数据,没有价格数据。如果我们希望能够计算出transaction对应USD 价值,那就需要用联表查询把价格数据给关联进来
联表查询可以理解为把两个表通过一定的条件关联起来形成一张虚拟的表,你可以方便地对这虚拟表做更多处理。
联表查询有2个部分构成
联表方式(join,left join ,right join ,cross join,full join)
关联条件(on)
用得最多的联表方式是join 跟left join,以这2个为例子去解释下具体的用法

- join:把两个表按照关联条件(on)关联在一起,取交集 \
Table A 跟 Table B通过姓名关联,其中交集是小红和小明,因为join是取交集,因此最终结果里姓名就只有小明和小红 \
两表中所有符合要求的数据都需要关联,因为Table B中小明有2条记录,所以关联的结果中小明也有两条数据 \
left join:以左表为主,把右表按照关联条件(on)往左表去关联,如果关联不到就用null填充 \
Table A 跟 Table B通过姓名关联,因为是以左表为主,所以尽管左表中小兰和小绿在右表中没有符合关联条件的数据,但是小兰和小绿也会出现在结果中,右表那部分因为关联不到数据,因此都用null填充

https://dune.com/queries/1528564
子查询(with as )
通过with as 可以构建一个子查询,把一段SQL的结果变成一个'虚拟表'(可类比为一个视图或者子查询),接下来的SQL中可以直接从这个'虚拟表'中取数据
通过with as 可以比较好地提高SQL的逻辑的可读性,也可以避免多重嵌套
with transactions_info as --通过with as 建立子查询命名为transactions_info
(
select
block_time
,transactions_info.stat_minute as stat_minute
,"from"
,"to"
,hash
,eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
,price
,eth_amount* price as usd_value
from
(
select --Select后跟着需要查询的字段,多个字段用空格隔开
block_time
,date_trunc('minute',block_time) as stat_minute --把block_time用date_trunc处理成分钟,方便作为主键去关联
,"from"
,"to"
,hash
,value /power(10,18) as eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc
) transactions_info
left join --讲transactions_info与price_info的数据关联,关联方式为 left join
(
--prices.usd表里存的是分钟级别的价格数据
select
date_trunc('minute',minute) as stat_minute --把minute用date_trunc处理成分钟,方便作为主键去关联
,price
from prices.usd
where blockchain = 'ethereum' --取以太坊上的价格数据
and symbol = 'WETH' --取WETH的数据
) price_info on transactions_info.stat_minute = price_info.stat_minute --left join关联的主键为stat_minute
)
select date_trunc('day',block_time) as stat_date
,sum(eth_amount) as eth_amount
,sum(usd_value) as usd_value
from transactions_info --从子查询形成的‘虚拟表’transactions_info中取需要的数据
group by 1
order by 1
with transactions_info as --通过with as 建立子查询命名为transactions_info
(
select
block_time
,transactions_info.stat_minute as stat_minute
,"from"
,"to"
,hash
,eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
,price
,eth_amount* price as usd_value
from
(
select --Select后跟着需要查询的字段,多个字段用空格隔开
block_time
,date_trunc('minute',block_time) as stat_minute --把block_time用date_trunc处理成分钟,方便作为主键去关联
,"from"
,"to"
,hash
,value /power(10,18) as eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度
from ethereum.transactions --从 ethereum.transactions表中获取数据
where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后
and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296
and value /power(10,18) >1000 --限制ETH Transfer量大于1000
order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc
) transactions_info
left join --讲transactions_info与price_info的数据关联,关联方式为 left join
(
--prices.usd表里存的是分钟级别的价格数据
select
date_trunc('minute',minute) as stat_minute --把minute用date_trunc处理成分钟,方便作为主键去关联
,price
from prices.usd
where blockchain = 'ethereum' --取以太坊上的价格数据
and symbol = 'WETH' --取WETH的数据
) price_info on transactions_info.stat_minute = price_info.stat_minute --left join关联的主键为stat_minute
)
select date_trunc('day',block_time) as stat_date
,sum(eth_amount) as eth_amount
,sum(usd_value) as usd_value
from transactions_info --从子查询形成的‘虚拟表’transactions_info中取需要的数据
group by 1
order by 1
No activity yet