查询中的MySQL计算

时间:2016-07-23 21:48:46

标签: mysql sql

我当前的查询如下所示:

SELECT * FROM `Entrys` WHERE `Timestamp` >  1469308755 AND `Timestamp` < 1469308765 AND (`Exchange` = 1 OR `Exchange` = 2) AND `Market` = 1

它给了我以下结果:

enter image description here

对于每个时间戳值(1469308756和1469308761),我想计算这样的价格之间的点差:

For each timestamp-value
  For each Exchange
    For each Other-Exchange
      Divide Exchanges price where type = 2 by Other-Exchanges price where type = 1 

这是我能解释的最好的。如果您不理解,请发表评论,我会尝试更好地解释。

根据上述数据,它应该是这样的:

格式:EnId.Field

943.Price / 940.Price
944.Price / 939.Price
961.Price / 985.Price
962.Price / 957.Price

计算出的数字应该是查询的输出。

我的SQL技能很低。甚至可以在单个查询中进行此类计算吗?

1 个答案:

答案 0 :(得分:1)

您需要使用JOIN。如果希望在同一表达式中引用来自两个不同行的数据(WHERE子句中的表达式或select-list中的表达式),则JOIN非常有用。

所以你需要将一行连接到满足这些条件的另一行:

  • 相同的时间戳
  • 一个不同的交流
  • 第一行是type = 2,第二行是type = 1

当你进行像这样的自联接时,你必须使用表别名。我会在两行中使用“numerator”和“denominator”。

SELECT numerator.timestamp, numerator.price / denominator.price AS spread
FROM Entrys AS numerator
JOIN Entries AS denominator ON numerator.timestamp=denominator.timestamp
     AND numerator.exchange <> denominator.exchange
     AND numerator.type = 2 AND denominator.type = 1;