MySQL
1CREATE TABLE tbl( 2SC int(4) NOT NULL, 3終値 double, 4`Date` datetime NOT NULL 5); 6 7insert into tbl values 8(1000, 110 ,'2019-06-20 15:00:00'), 9(1000, 80 ,'2019-06-19 15:00:00'), 10(1000, 94 ,'2019-06-18 15:00:00'), 11(2000, 91 ,'2019-06-20 15:00:00'), 12(2000, 78 ,'2019-06-19 15:00:00'), 13(2000, 86 ,'2019-06-18 15:00:00'), 14(3000, 9444 ,'2019-06-20 15:00:00'), 15(3000, 8777 ,'2019-06-19 15:00:00'), 16(3000, 8887 ,'2019-06-18 15:00:00');
Database内
SC | 終値 | Date |
---|---|---|
1000 | 110 | 2019/06/20 15:00:00 |
1000 | 80 | 2019/06/19 15:00:00 |
1000 | 94 | 2019/06/18 15:00:00 |
2000 | 91 | 2019/06/20 15:00:00 |
2000 | 78 | 2019/06/19 15:00:00 |
2000 | 86 | 2019/06/18 15:00:00 |
3000 | 9444 | 2019/06/20 15:00:00 |
3000 | 8777 | 2019/06/19 15:00:00 |
3000 | 8887 | 2019/06/18 15:00:00 |
とした際にn日の平均終値よりx%大きい値を抽出したいという場合SQL側で書いて別テーブルに格納、outer joinで検索以外手はないでしょうか?
#やりたい
n=3,x=110とした際
SC=1000→(110+80+94)/3=94.7 110/94.7100=116%
SC=2000→(91+78+86)/3=85 91/85100=107%
SC=3000→(9444+8777+8887)/3=9036 9444/9036*100=105%
なので検索結果は
SC | 終値変化率 | Date |
---|---|---|
1000 | 1.16 | 2019/06/20 15:00:00 |
一応別DBではカラムを追加して直打ちでできたのですがデータ量が多いので直打ちしきれないです...
x=110とした際→これは間違いですよね?
その日の終値をもとにですね?
2019/06/20と3日間を指定するじゃないのですか?
(追記)
あ、110は110%なのか・・・
常に日付は連続しているわけではないのですよね?
どうするつもりでしょうか?
18日~20日のような範囲指定ができるのでしょか?
SQLで使っているテーブルは動作確認するためには、CREATE TABLE文とテーブルに存在するデータをINSERT文で提示すると適切なコメントが付き易いです。
集計を都度行うと時間がかかるから、あらかじめ集計したデータを別テーブルに書き出したいってことですか?
nとxは決め打ちでいいのでしょうか?
>>yambejp様
範囲はphpにて曜日判定で取得するようにしています
>>Orlofsky様
ご指摘ご最もです..次回以降そうさせていただきます
>>hihijiji様
テーブルに書き出したいでなく単に抽出をしたいと考えています
n,xは手打ちです
同じ疑問を持った人がこの質問を見つけた時に備えて、今からでも直した方がよろしいかと。
回答1件
あなたの回答
tips
プレビュー