データベース

データベースに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(MySQL)
MySQL ストアドファンクションについて
投稿日時: 17/01/29 20:02:00
投稿者: mgtarou

株価テーブルから移動平均を得たいと思っています。
株価テーブル stock_daily_tbl
stock_code 銘柄コード
vol_date 出来高年月日

closingprice 終値
 
まず 5日の移動平均として
select avg(closingprice) from
(select stock_code,vol_date,closingprice
from stock_daily_tbl where
stock_code = 5401 and
vol_date <= '2017-01-27'
order by vol_date desc limit 5 ) t;
で値が得られることは確認したので、これを元に
drop function if exists sf_ndays_avgprice;
delimiter //
create function sf_ndays_avgprice (int scode, date hizuke,int nissu)
  returns double
begin
return ( select avg(closingprice) from
         ( select stock_code,vol_date,closingprice
            from stock_daily_tbl
              where
               stock_code = scode and
               vol_date <= hizuke
               order by vol_date desc limit nissu ) t
        );
end
//
delimiter ;
としたのですが、下記の通りsystaxerrorになります。
MySQL server version for the right syntax to use near 'int scode, date hizuke,int nissu)
  returns double not deterministtic
begin
re' at line 1
 
何処を直せば良いのか教えていただけないでしょうか

投稿日時: 17/01/30 07:29:37
投稿者: mgtarou

自己解決
変数の宣言が逆だった
後、endのあとに";"も追加
 
drop function if exists sf_ndays_avgprice;
delimiter //
create function sf_ndays_avgprice (scode int , hizuke date ,nissu int )
  returns double
begin
return ( select avg(closingprice) from
         ( select stock_code,vol_date,closingprice
            from stock_daily_tbl
              where
               stock_code = scode and
               vol_date <= hizuke
               order by vol_date desc limit nissu ) t
        );
end;
//
delimiter ;
で動作確認