python - 在mysql中添加列移动平均线

标签 python mysql sql sql-update moving-average

我目前正在将加密货币市场数据添加到我的 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/

相关文章:

python - 从另一列的值创建新列

python - 比较两个 numpy 数组并插入 nans

python - 对 django tastypie 资源的 PUT 请求不起作用

mysql - from子句问题与mysql

php - 如何从 mysql 表的每一列中创建一个变量?

python - 比较两个文件并将报告保存在任何其他文件中

php - Yii Controller 方法SQL查询

java - 在 MySql 上映射一个可以增长到 400KB 的 byte[]

php - 要解决 PDO NULL 问题,请在 PHPMyAdmin 中将字段更改为 NULL 或检查代码中是否为 NULL,如果是,则设置为空字符串?

为用户设计的SQL表,可以给用户留下反馈