有没有办法将SELECT的结果列添加到mySQL8中已经存在的表中?
我正在尝试使用我是mySQL的窗口函数来查找股票价格的SMA。我可以用SELECT语句完成这项工作,但是ALTERTABLE语句不允许我使用窗口函数。我的想法是使用select语句查找平均值,并将原始表与其返回的列连接起来:有没有办法将SELECT的结果列添加到mySQL8中已经存在的表中?,mysql,sql,database,sql-update,window-functions,Mysql,Sql,Database,Sql Update,Window Functions,我正在尝试使用我是mySQL的窗口函数来查找股票价格的SMA。我可以用SELECT语句完成这项工作,但是ALTERTABLE语句不允许我使用窗口函数。我的想法是使用select语句查找平均值,并将原始表与其返回的列连接起来: SELECT date_, close, AVG(close) OVER (ORDER BY date_ ASC ROWS 11 PRECEDING) AS SMA12 FROM intel_stock; 返回原始表中包含3行的表 有没有办法将新计算的行“添加/插入/连
SELECT
date_, close, AVG(close) OVER (ORDER BY date_ ASC ROWS 11 PRECEDING) AS SMA12 FROM intel_stock;
返回原始表中包含3行的表
有没有办法将新计算的行“添加/插入/连接/合并”到原始表的右侧(假设我已经添加了一个额外的空列)
您需要先添加列,然后更新它。
更新。。。join
语法对于第二步很方便
-- add the new column
alter table intel_stock add column sma12 float; -- or whathever datatype is needed
-- set the new column
update intel_stock ist
inner join (
select
date_,
avg(close) over (order by date_ rows 11 preceding) as sma12
from intel_stock
) ist1 on ist1.date_ = ist.date_
set ist.sma12 = ist1.sma12
请注意,使用视图存储派生信息可能更简单。这样,当周围行中的数据发生更改时,您就可以省去维护新列的繁琐任务:
create view intel_stock as
select
is.*,
avg(close) over (order by date_ rows 11 preceding) as sma12
from intel_stock
您需要先添加列,然后更新它。
更新。。。join
语法对于第二步很方便
-- add the new column
alter table intel_stock add column sma12 float; -- or whathever datatype is needed
-- set the new column
update intel_stock ist
inner join (
select
date_,
avg(close) over (order by date_ rows 11 preceding) as sma12
from intel_stock
) ist1 on ist1.date_ = ist.date_
set ist.sma12 = ist1.sma12
请注意,使用视图存储派生信息可能更简单。这样,当周围行中的数据发生更改时,您就可以省去维护新列的繁琐任务:
create view intel_stock as
select
is.*,
avg(close) over (order by date_ rows 11 preceding) as sma12
from intel_stock
您表的主键是什么?您应该添加更多信息请参见@GMB it is“date_uu”如果我包含一个片段会有帮助吗?您表的主键是什么?您应该添加更多信息请参见@GMB it is“date_u”如果我包含一个片段会有帮助吗?