Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法将SELECT的结果列添加到mySQL8中已经存在的表中?_Mysql_Sql_Database_Sql Update_Window Functions - Fatal编程技术网

有没有办法将SELECT的结果列添加到mySQL8中已经存在的表中?

有没有办法将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行的表 有没有办法将新计算的行“添加/插入/连

我正在尝试使用我是mySQL的窗口函数来查找股票价格的SMA。我可以用SELECT语句完成这项工作,但是ALTERTABLE语句不允许我使用窗口函数。我的想法是使用select语句查找平均值,并将原始表与其返回的列连接起来:

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”如果我包含一个片段会有帮助吗?