質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

906閲覧

n日の平均終値よりx%大きい値を抽出したい

miya71ma

総合スコア49

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2019/06/20 08:45

編集2019/06/27 03:56

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
10001102019/06/20 15:00:00
1000802019/06/19 15:00:00
1000942019/06/18 15:00:00
2000912019/06/20 15:00:00
2000782019/06/19 15:00:00
2000862019/06/18 15:00:00
300094442019/06/20 15:00:00
300087772019/06/19 15:00:00
300088872019/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/85
100=107%
SC=3000→(9444+8777+8887)/3=9036 9444/9036*100=105%
なので検索結果は

SC終値変化率Date
10001.162019/06/20 15:00:00

一応別DBではカラムを追加して直打ちでできたのですがデータ量が多いので直打ちしきれないです...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/06/20 09:01 編集

x=110とした際→これは間違いですよね? その日の終値をもとにですね? 2019/06/20と3日間を指定するじゃないのですか? (追記) あ、110は110%なのか・・・ 常に日付は連続しているわけではないのですよね? どうするつもりでしょうか? 18日~20日のような範囲指定ができるのでしょか?
Orlofsky

2019/06/20 09:11

SQLで使っているテーブルは動作確認するためには、CREATE TABLE文とテーブルに存在するデータをINSERT文で提示すると適切なコメントが付き易いです。
hihijiji

2019/06/20 09:17

集計を都度行うと時間がかかるから、あらかじめ集計したデータを別テーブルに書き出したいってことですか? nとxは決め打ちでいいのでしょうか?
miya71ma

2019/06/21 01:27

>>yambejp様 範囲はphpにて曜日判定で取得するようにしています >>Orlofsky様 ご指摘ご最もです..次回以降そうさせていただきます >>hihijiji様 テーブルに書き出したいでなく単に抽出をしたいと考えています n,xは手打ちです
Orlofsky

2019/06/21 02:26

同じ疑問を持った人がこの質問を見つけた時に備えて、今からでも直した方がよろしいかと。
guest

回答1

0

ベストアンサー

SQL

1CREATE TABLE tbl( 2SC int(4) NOT NULL, 3終値 double, 4`Date` datetime NOT NULL 5); 6insert into tbl values 7(1000, 110 ,'2019-06-20 15:00:00'), 8(1000, 80 ,'2019-06-19 15:00:00'), 9(1000, 94 ,'2019-06-18 15:00:00'), 10(2000, 91 ,'2019-06-20 15:00:00'), 11(2000, 78 ,'2019-06-19 15:00:00'), 12(2000, 86 ,'2019-06-18 15:00:00'), 13(3000, 9444 ,'2019-06-20 15:00:00'), 14(3000, 8777 ,'2019-06-19 15:00:00'), 15(3000, 8887 ,'2019-06-18 15:00:00'); 16 17select SC,終値,( 18select avg(終値) from tbl 19where SC=t1.SC 20) as 平均 21,終値/( 22select avg(終値) from tbl 23where SC=t1.SC ) as 終値変化率 24from tbl as t1 25where not exists(select 1 from tbl where SC=t1.SC and Date>t1.Date) 26

サンプルがデータとピッタリの数しか無いと例外がはじけないです

投稿2019/06/20 09:15

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miya71ma

2019/06/21 01:39 編集

ありがとうございます...本当に申し訳ないのですがSC=t1.SCの部分は何をされているのでしょうか...ご教授いただけると幸いです (追記)すみません。as見て理解しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問