我当前的查询如下所示:
SELECT * FROM `Entrys` WHERE `Timestamp` > 1469308755 AND `Timestamp` < 1469308765 AND (`Exchange` = 1 OR `Exchange` = 2) AND `Market` = 1
它给了我以下结果:
对于每个时间戳值(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技能很低。甚至可以在单个查询中进行此类计算吗?
答案 0 :(得分:1)
您需要使用JOIN
。如果希望在同一表达式中引用来自两个不同行的数据(WHERE子句中的表达式或select-list中的表达式),则JOIN非常有用。
所以你需要将一行连接到满足这些条件的另一行:
当你进行像这样的自联接时,你必须使用表别名。我会在两行中使用“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;