在 mysql 中添加列移动平均线
Add column moving average in mysql
我目前正在将加密货币市场数据添加到我的 mysql 数据库中。我每分钟有以下数据:
Open time
Close time
Highest price
Lowest price
Number of trades
我想将不同时间段的简单移动平均线添加到 mysql 数据库中。我试图在 python 中进行此计算,但这花费了很多时间。因此,我使用以下查询计算了 50 天时间段的 SMA。
mycursor.execute(
"""select
open_date,
avg(close) over(rows between 49 preceding and current row)
from {}""".format(use_table)
)
但是,除了进行查询之外,我还想直接更新数据库中 SMA 的结果。最好,我想要一个能够更新所有尚未计算的 SMA 的查询。因为我每天更新一次数据库。
由于我是使用 SQL 的新手,任何有关如何使用 SMA 更新列的建议都会非常有帮助。
可以将您的 SELECT
查询转换为 UPDATE
。诀窍是在 suquery 中调用 window 函数 (AVG(...) OVER(...)
)。您可以使用 WHERE
子句仅更新尚未计算的记录。
UPDATE mytable trg
INNER JOIN (
SELECT
open_date,
AVG(close) OVER(ROWS BETWEEN 49 PRECEDING AND CURRENT ROW) sma
FROM mytable
) src ON trg.id = src.id
SET trg.sma = src.sma
WHERE trg.sma IS NULL;
我目前正在将加密货币市场数据添加到我的 mysql 数据库中。我每分钟有以下数据:
Open time
Close time
Highest price
Lowest price
Number of trades
我想将不同时间段的简单移动平均线添加到 mysql 数据库中。我试图在 python 中进行此计算,但这花费了很多时间。因此,我使用以下查询计算了 50 天时间段的 SMA。
mycursor.execute(
"""select
open_date,
avg(close) over(rows between 49 preceding and current row)
from {}""".format(use_table)
)
但是,除了进行查询之外,我还想直接更新数据库中 SMA 的结果。最好,我想要一个能够更新所有尚未计算的 SMA 的查询。因为我每天更新一次数据库。
由于我是使用 SQL 的新手,任何有关如何使用 SMA 更新列的建议都会非常有帮助。
可以将您的 SELECT
查询转换为 UPDATE
。诀窍是在 suquery 中调用 window 函数 (AVG(...) OVER(...)
)。您可以使用 WHERE
子句仅更新尚未计算的记录。
UPDATE mytable trg
INNER JOIN (
SELECT
open_date,
AVG(close) OVER(ROWS BETWEEN 49 PRECEDING AND CURRENT ROW) sma
FROM mytable
) src ON trg.id = src.id
SET trg.sma = src.sma
WHERE trg.sma IS NULL;