我有两个表asset_data和ticker_data。中的符号列 asset_data需要与表ticker_data中的quoteAsset匹配。 找到匹配项,计算中的lastPriceUSD之间的价格差 使用createdAt标记在过去24小时内。
比较24中相同货币符号的两个价格 小时周期。例如。如果EUR在2019-05-12在18:05的价格是0.89, 需要在2019-05-11的同时与昨天进行EUR汇率 18:05
asset_data表
+---------+--------+--------+--------------+---------------------+
| assetId | pair | symbol | lastPriceUSD | createdAt |
+---------+--------+--------+--------------+---------------------+
| 1 | EURUSD | EUR | 0.8900000000 | 2019-05-12 18:05:10 |
| 2 | AUDEUR | AUD | 0.6500000000 | 2019-05-12 18:05:45 |
+---------+--------+--------+--------------+---------------------+
ticker_data表
+----------+--------+------------+--------------+---------------------+
| tickerId | pair | quoteAsset | lastPriceUSD | createdAt |
+----------+--------+------------+--------------+---------------------+
| 1 | USDEUR | EUR | 0.9500000000 | 2019-05-11 18:06:40 |
| 2 | EURAUD | AUD | 0.7500000000 | 2019-05-11 18:17:49 |
+----------+--------+------------+--------------+---------------------+
预期结果
symbol difference
EUR -6.00%
AUD -10.00%
答案 0 :(得分:0)
您可以像这样联接表:
select
a.symbol,
100.0 * (a.lastpriceusd - t.lastpriceusd) / a.lastpriceusd as difference
from asset_data a inner join ticker_data t
on t.quoteasset = a.symbol and (
select min(createdat) from ticker_data
where quoteasset = a.symbol and
createdat between date_add(a.createdat, interval '-1' day) and a.createdat
) = t.createdat
条件:
将欧元与昨天的欧元同时与2019-05-11在18:05进行比较
如果2个日期相差的时间不是恰好 1天,则该数据将不准确,因此我使用的createdat
中的最小ticker_data
大于createdat
-1天来自asset_data