SQL`均线
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while @@fetch_status=0 /*开始循环*/ begin declare @average_sfy numeric(12,2) /*声明变量*/ exec stock_fday @whichday=@日期,@days_amount=@days_num, @average_sfy = @average_sfy OUTPUT /*调用第二个存储过程计算当天的N日均线*/ update 大盘数据/*把数据更新到表中“均线”列里面*/ set 均线= @average_sfy where 日期=@日期 fetch relative 1 from sfy_cursor into @日期,@均线 end /*循环结束*/ close sfy_cursor /*关闭与释放游标*/ deallocate sfy_cursor select 日期,收盘,均线/*最后把结果显示出来*/ from 大盘数据
这是第二个存储过程单独运行的情况: 这是第二个存储过程单独运行的情况:
日的五日均线) (这是2002年3月14日的五日均线) 这是 年 月 日的五日均线 具体的计算过程显示: 具体的计算过程显示:
• 第三个存储过程
create procedure stock_avgline /*创建一个存储过程*/ @days_num int /*声明存储过程的变量,输入“N日均线”的N*/ As Set nocount on /*关闭显示影响多少行*/ exec stock_adcol /*调用第一个存储过程创建一新列*/ declare @日期 datetime,@均线 numeric(12,2),@i int /*声明变量*/ declare sfy_cursor cursor local static /*声明游标*/ for select 日期,均线 from 大盘数据 open sfy_cursor /*打开游标*/ set @i=@days_num+1 fetch absolute @i from sfy_cursor into @日期,@均线 /*例如是五日均线,则从表的第六行读起*/ ……
输入N日均线的 ,例如下面的5, 输入 日均线的N,例如下面的 ,就是五日均线了 日均线的
运行结果: 运行结果:
输入参数, 输入参数,计算七日均线
运行结果: 运行结果:
(可以看到如果要全部显示出来的话,就会有个缺陷,就是运行时间太长了,用了50多 可以看到如果要全部显示出来的话,就会有个缺陷,就是运行时间太长了,用了 多 秒才有结果) 秒才有结果)
表更新后的情况(七日均线): 表更新后的情况(七日均线):
谢谢观看
while @@fetch_status=0 /*开始循环*/ begin if @日期=@whichday /*把我们输入的值与@日期比较*/ begin while @count<@days_amount /*小循环体*/ begin fetch prior from stock_cursor into @日期,@收盘/*读取当前行上一行数据*/ set @sum=@sum+@收盘 set @count=@count+1 end fetch absolute -1 from stock_cursor into @日期,@收盘 /*把游标跳到倒数第一行*/ end /*小循环结束*/ fetch next from stock_cursor into @日期,@收盘/*读取下一行*/ end /*循环结束*/ set @average_sfy=@sum/@days_amount /*计算均线*/ close stock_cursor /*关闭与释放游标*/ deallocate stock_cursor
SQL课程设计-N日均线
设计思路
1、使用存储过程实现带参数的功能 、 2、在大盘数据里增加一新列用于显示 日均线 、在大盘数据里增加一新列用于显示N日均线 3、根据输入的参数找出计算的第一天然后为之后的每一天 、 做同样的事情
其中用到的3个存储过程: 其中用到的 个存储过程: 个存储过程 1st 创建名为“均线”的新列 创建名为“均线” 2nd 某天的 日均线计算过程 某天的N日均线计算过程 3rd 在第 在第N+1天后(包括第 天后( 天后 包括第N+1天)为每一天做同样的事情 天 计算均线) (计算均线)
• 第二个存储过程
create procedure stock_fday /*创建一个存储过程*/ @whichday datetime,@days_amount int,@average_sfy numeric(12,2) output /*声明存储过程的变量*/ as declare @日期 datetime,@收盘 numeric(12,2),@sum numeric(12,2),@count int /*声明变量*/ set @sum=0 set @count=declare stock_cursor cursor local static /*声明游标*/ for select 日期,收盘 from 大盘数据 open stock_cursor /*打开游标*/ fetch next from stock_cursor into @日期,@收盘/*读取表的第一行数据*/ ……
• 第一个存储过程
create procedure stock_adcol /*创建一个存储过程*/ as IF COL_LENGTH( ‘大盘数据’,‘均线’) is not NULL /*如果存在名为“均线”的列,先删除再增加*/ begin alter table 大盘数据 drop column 均线/*删除列*/ end alter table 大盘数据 add 均线 numeric(12,2) null /*增加名为“均线”的列*/