SQL 计算某只股票 5 日移动平均价,和 5 日交易量加权移动平均价。(附上建表
语句和查询语句的 SQL)
use sql_ma
go
if COL_LENGTH('matable','ma5')is not null
begin
alter table matable
drop column ma5
end
alter table matable
add ma5 decimal(18,2)null
if COL_LENGTH('matable','volume5')is not null
begin
alter table matable
drop column volume5
end
alter table matable
add volume5 decimal(28,4)null
go
declare @i int=1 /*定义循环变量 i*/
declare @j int=1 /*定义循环变量 j*/
declare @n int /*定义变量 n 表示 matable 表中数据的总量*/
declare @close_y float=0
/*定义变量 close_y 表示某天前日这天的收盘*/
declare @close_sum float=0 /*定义变量 close_sum 表示某天前 n 日收盘的总和*/
declare @close_avg float /*定义变量 close_avg 表示某天的 n 日均线值*/
declare @volume_y float=0 /*定义变量 volume_y 表示某天前日这天的收盘*/
declare @volume_sum float=0 /*定义变量 volume_sum 表示某天前 n 日收盘的总和*/
declare @volume_avg float /*定义变量 volume_avg 表示某天的 n 日均线值*/
select @n=count(*)from matable /*查询 matable 数据表中数据的总量*/
declare ma1 cursor scroll
for select [dt],[close],[volume] from matable
open ma1
declare @close float
declare @volume float
declare @dt varchar(50)
while @i<5
begin
fetch absolute @i from ma1 into @dt,@close,@volume
set @close_sum=@close_sum+@close
set @volume_sum=@volume_sum+@volume
set @i=@i+1
end
while @i<=@n
begin
fetch absolute @i from ma1 into @dt,@close,@volume
set @close_sum=@close_sum-@close_y+@close
set @close_avg=@close_sum/5
set @volume_sum=@volume_sum-@volume_y+@volume
set @volume_avg=@volume_sum/5
update matable set ma5=@close_avg where [dt]=@dt
update matable set volume5=@volume_avg where [dt]=@dt
fetch absolute @j from ma1 into @dt,@close,@volume
set @close_y=@close
set @volume_y=@volume
set @i=@i+1
set @j=@j+1
end
close ma1
select * from matable
与 excel 里计算结果进行对比