比较两个不同表中的两个列值,并基于24小时周期计算差异

时间:2019-05-12 10:33:45

标签: mysql

  

我有两个表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%

1 个答案:

答案 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