我有一个具有以下架构的金融交易单表 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
的 s。最终,我希望能够计算所有这些货币对价格的运行(随时间)协方差。最初我可以满足于只计算一对的协方差,然后我可以迭代。
为了计算协方差,我需要两个长度相等的数组(在这种情况下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 知识中,我无法理解如何组合这些查询。任何帮助深表感谢。最终能够运行一个计算特定时间块的成对协方差的查询会很可爱。