python - 在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
. AVG(...) OVER(...)
诀窍是在 suquery中调用窗口函数 ( )。您可以使用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;
推荐阅读
- bash - Unix find 命令执行时的进度条
- c# - 将 JSON 对象反序列化为的类混淆
- .net-core - UserManager.GetUserName(User) 登录成功后返回NULL
- c# - 无法在 c# 代码中调用 Azure Function App 方法 Api url
- java - 我们如何根据一个键对 json 对象列表进行排序
- sql - 如何获取 TSQL 中的两个日期之间的凌晨 4 点有多少小时
- dependency-injection - Kentico 11+ WebForms PortalEngine 和 WebObjectActivator
- scala - Scala:由相邻列分区的数据框列上的中值 UDF
- android - 相对于Android中内部编辑文本的焦点更改Relative Layout的边框颜色
- javascript - 如何延迟 gif 从页面加载开始?