如何解决为股价数据表添加移动平均列
我正在维护具有列的股票价格数据表(mySQL)
ticker,date,open,high,low,close,volume
以(股票代号,日期)作为索引。
该表未完全排序(仅部分排序),即看起来像
ticker,...
--------------------
AAA,19900102,...
...
AAA,20200817,... <= collected data for AAA 1990.01.02-2020.08.17 (initial large chunk)
...
ZZZ,...
...
ZZZ,... <= collected data for ZZZ 1990.01.02-2020.08.17 (initial large chunk)
AAA,20200818,... <= collected data for AAA 2020.08.18 (daily)
...
ZZZ,... <= collected data for ZZZ 2020.08.18 (daily)
AAA,20200819,... <= collected data for AAA 2020.08.19 (daily)
...
ZZZ,... <= collected data for ZZZ 2020.08.19 (daily)
最初,我收集了大量过去的数据,并一直在每个工作日收集日常数据。
现在我想添加一列称为MA20(收盘价的20天移动平均线)。
应该为所有现有行填充新列,并为每个新添加的行自动填充新列。有没有一种方法可以使用SQL实现此目标? (我应该每天对表格进行排序以计算移动平均值吗?)
谢谢。
解决方法
ALTER TABLE YourTable ADD MA20 decimal (18,2)
您将需要使用窗口功能来填充历史数据。
WITH CTE AS (
SELECT ticker,date,AVG(close) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 20 PRECEDING AND CURRENT ROW) as MA20
FROM YourTable
)
UPDATE YourTable
INNER JOIN CTE ON CTE.ticker=YourTable.ticker AND CTE.date=YourTable.date
SET MA20=CTE.MA20
然后使用相同的逻辑,创建一个触发器,该触发器将处理新传入的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。