我对sql很新,我很难弄清楚如何编写查询来更新我的一个表。我有一个名为stock_price
的表,其中包含以下字段:
stock_symbol, date, open_price, daily_high, daily_low, close_price,
和volume
。
该表填充了每年美国股票的2年(2012年,2013年)每日股票价格,相当于约190万条记录。
我想添加两个名为year_high
和year_low
的新字段。对于2013年的记录,我需要使用表格中的现有数据(前一个365天的close_price
的最小值和最大值)来计算和更新这些新字段。我真的迷失了如何解决这个问题,所以我希望有人可以帮助我开始。
答案 0 :(得分:0)
使用通用SQL进行计算的方法:
select p.*,
(select min(sp2.close_price)
from stock_price sp2
where sp2.stock_symbol = sp.stock_symbol and
sp2.date between sp.date - 365 and sp.date
) as yearmin,
(select max(sp2.close_price)
from stock_price sp2
where sp2.stock_symbol = sp.stock_symbol and
sp2.date between sp.date - 365 and sp.date
) as yearmax
from stock_price sp;
数据库在日期算术上略有不同,因此减法可能不够。
如果表格中有列(或者使用alter table
添加了列),则可以将其更新为:
update stock_price
set year_min = (select min(sp2.close_price)
from stock_price sp2
where sp2.stock_symbol = stock_price.stock_symbol and
sp2.date between stock_price.date - 365 and stock_price.date
),
year_max = (select max(sp2.close_price)
from stock_price sp2
where sp2.stock_symbol = stock_price.stock_symbol and
sp2.date between stock_price.date - 365 and stock_price.date
);
请注意,即使没有一整年,这两种情况都会输入前364天的值。
答案 1 :(得分:0)
更新stock_price设置year_high =(选择max(close_price),其中'start_date'和'end_date'之间的日期)'start_date'和'end_date'之间的日期;
更新stock_price设置year_low =(选择min(close_price),其中'start_date'和'end_date'之间的日期)'start_date'和'end_date'之间的日期;
表中会有冗余数据以这种方式执行,另一种方法是使用单独的表来显示年度最小值和最大值