sql實現n日均線

if COL_LENGTH('book1','n日均線')isnot null/*判斷表中是否存在列名爲n

均線的列,存在就刪除,不存在就創建,book表示數據表名*/

begin

    alter table book1  /*修改表*/

    drop column n日均線/*刪除列*/

end

    alter table book1  /*修改表*/

    add  n日均線decimal(18,2)null /*增加列*/

GO

/*********************************************創建存儲過程*****************************************************/

    CREATE  PROCEDUREnri/*存儲過程名稱爲nri*/

    @n int,@resfloatoutput/*輸入參數n表示n日均線,resn日均線的值*/

    as

    declare @low int  /*定義循環變量low*/

    declare @high int  /*定義循環變量@high*/

    declare @max int  /*定義變量max表示book1表中數據的總量*/

    declare @nsum float   /*定義變量nsum表示某天n日收盤的總和*/

    set @high=@n /*high初始爲n*/

    select @max=count(*)from book1   /*查詢book數據表中數據的總行量*/  

 

/*******************************創建遊標************************************************/

       declare test cursor SCROLL FOR   /*定義遊標名爲test*/

       select 時間,收盤from book1 /*取得要查詢的結果集,遊標指向此結果集*/

       open test    /*打開遊標*/

       declare @收盤float /*定義局部變量收盤,數據類型要跟表中的列保持一致,接收book1表中收盤列的數據*/

       declare @時間nvarchar(255)  /*定義局部變量時間,數據類型要跟表中的列保持一致,接收book1表中時間列的數據*/

 

/****************************外循環開始*************************************************/

           while @high<=@max/*所求某日的均線值該日是否不大於表中數據的總行量*/

           begin

              set @nsum=0/*某天n日收盤的總和初始值爲*/

              set @low=@high-@n+1/*所求某天n日均線這n天中的第一日始終比最後一日少(n-1)日*/

/******************************內循環開始*****************************************************/

              while @low<=@high/*low是否不大於high,low每次循環+1表示下一日,直到等於所求n日中最後一日*/

              begin 

                   fetch ABSOLUTE @lowfromtest into @時間,@收盤/*遊標根據low值定位對應第幾行(第幾日)數據,

                     並把數據賦值給局部變量@時間,@收盤*/

                   set @nsum=@nsum+@收盤/*n日的收盤值相加*/

                   set @res=@nsum/@n    /*求得某日的n日均線*/

                   set @low=@low+1      /*low+1表示下一日*/

               end

               update book1 set n日均線=@res where 時間=@時間/*更新日均線的值,把求得的日均線的值更新到對應日期*/

               set @high=@high+1  /*求下一日的n日均線*/

            end

 

CLOSE test   /*關閉遊標*/

DEALLOCATE test   /*釋放遊標資源*/

 

 

/*新建查詢*/

DECLARE @rijun float     /*聲明變量@rijun接收存儲過程的輸出參數*/

EXEC nri @n=6,@res=@rijunOUTPUT /*執行存儲過程nri,輸入參數n(6日均線)*/

                                 /*輸出參數res傳遞給變量@rijun*/

 

 

/*新建查詢刪除存儲過程*/

 

drop  proc nri

 

 

 

 

 


發佈了13 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章