プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

株価の移動平均値、例えば5日の移動平均値をSQL文で求めたいと思っています。

+----------+-------+
| ymd | value |
+----------+-------+
| 19960401 | 21100 |
| 19960402 | 21200 |
| 19960403 | 21200 |
| 19960404 | 21800 |
| 19960405 | 21900 |
| 19960408 | 21500 |
| 19960409 | 22000 |
 ・・・
| 20070510 | 2570 |
| 20070511 | 2545 |
| 20070514 | 2530 |
| 20070515 | 2555 |
| 20070516 | 2545 |
| 20070517 | 2450 |
+----------+--------+

例えば、1996/4/5時点の5日移動平均値は、
| 19960401 | 21100 |
| 19960402 | 21200 |
| 19960403 | 21200 |
| 19960404 | 21800 |
| 19960405 | 21900 |
(21100+21200+21200+21800+21900)/5=21440
となります。

5日毎にgroup byする方法を見つけるかと考えましたが、今のところ見つけられません。
銘柄毎に2000件データ×4000銘柄分あります。
今回は1銘柄のみの考慮、つまり、日付と株価のみでの考慮をお願いしたいと思っております。
下記にありますサンプルのデータでありますと、19960405,19960408,19960409の3日に関して移動平均値が出る結果となります。
よろしくお願いいたします。

MySQLバージョン 5.0.37
Windows2000 SP4


サンプル

create table t_kabuka
(ymd int(8), value int(6),primary key(ymd));
insert into t_kabuka values
(19960401,21100),
(19960402,21200),
(19960403,21200),
(19960404,21800),
(19960405,21900),
(19960408,21500),
(19960409,22000);

A 回答 (1件)

連続性がないデータなので厳しいですね。


行連番のフィールドなどあれば、それをキーに外部結合などして
SQLとして十分な性能を発揮できそうですが
いまのままだとサブクエリーを前提に無駄に重い処理がかかるとおもいます。

「移動平均 SQL」などで検索するといろんなやり方が紹介されていますので
ご自身で探してみるとよいでしょう
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問前に「移動平均線 SQL」で検索したのですが、
質問後に「移動平均 SQL」でドンピシャが出て困っていました。
質問後だと、質問者からコメントを入れられないんですね。

>無駄に重い処理がかかるとおもいます
本当に仰る通りで、PCがフリーズしまくりました。
日付を任意の一日に特定しても、3s。
やはり、長大データ数の場合は、indexを使わないSQLは使い物になりません。
アプリ側で編集することにします。

お礼日時:2007/05/19 00:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す