我有一个MySQL的单表财务交易数据库,具有以下模式:
+-----------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| symbol_id | tinyint(3) unsigned | YES | MUL | NULL | |
| timestamp | timestamp(6) | YES | MUL | NULL | |
| buy_sell | char(1) | YES | | NULL | |
| price | decimal(10,6) | YES | MUL | NULL | |
+-----------------+---------------------+------+-----+---------+-------+
有200个独特的“symbol_id”。最终,我想能够计算所有这些货币对价格的运行(随时间变化)协方差。 最初,我可以先计算单个货币对的协方差,然后再进行迭代。
为了计算协方差,我需要两个等长的数组(在本例中是“price”)。我正在努力将其写成一个查询,并避免返回所有记录以便本地计算协方差。
以下是我尝试用两个伪SQL查询实现的内容:
SELECT
(AVG(price1*price2) - AVG(price1)*AVG(price2)) as covar
FROM data
并且
SELECT price AS price1 WHERE HOUR(timestamp)=1 AND symbol_id=1 LIMIT(MIN(COUNT(price1,price2)))
SELECT price AS price2 WHERE HOUR(timestamp)=1 AND symbol_id=2 LIMIT(MIN(COUNT(price1,price2)))
第一个语句接收两个等长的 price1
和 price2
数组并计算它们之间的协方差。
第二个语句是在选择两种不同类型的交易,且这些交易都发生在第一小时内,并且限制返回值具有相同的长度。
在我有限的SQL知识中,我难以理解如何将这些查询合并。非常感谢任何帮助。最终能够运行一个查询来计算特定时间段内成对协方差将是美妙的。