我目前正在将加密货币市场数据添加到我的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中调用窗口函数(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;

关于python - 在mysql中添加列移动平均,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54774889/

10-13 03:24