質問編集履歴

2

エラーコードを追記

2019/06/08 05:04

投稿

GARYU
GARYU

スコア8

test CHANGED
File without changes
test CHANGED
@@ -159,3 +159,37 @@
159
159
 
160
160
 
161
161
  何卒ご指導よろしくお願いします。
162
+
163
+
164
+
165
+
166
+
167
+ 《追記2》
168
+
169
+ 教えて頂いたコードを実行したところ
170
+
171
+
172
+
173
+ 13:09:05 with date_range as ( -- 指定した期間内(最新日付より過去7日) select date from b hst where date <= (select max(date) from b) and (select count(*) from b where date>=hst.date) <= 7 ) , peak as ( --期間高値:指定した期間内の最高値、最安値 select STOCK_CD, STOCK_NAME, Max(HIGH) max_peak, Min(LOW) min_peak from a where date in (select date from date_range) group by STOCK_CD, STOCK_NAME ) , rasio as ( --前日比 :テーブルB内にある最新日の終値とその前営業日の終値との比較 select date, STOCK_CD , close - lag(CLOSE) over (partition by STOCK_CD order by date) rasio from a ) select pk.* --・高値日 :期間高値を付けた日 , (select max(date) from a where STOCK_CD=pk.STOCK_CD and HIGH=pk.max_peak and date in (select date from date_range) ) --・安値日 :期間安値を付けた日 , (select max(date) from a where STOCK_CD=pk.STOCK_CD and LOW=pk.min_peak and date in (select date from date_range) ) , (select max(rasio) from rasio where date = (select max(date) from b) and STOCK_CD=pk.STOCK_CD ) from peak pk Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '--期間高値:指定した期間内の最高値、最安値 select STOCK_' at line 9 0.000 sec
174
+
175
+
176
+
177
+ のエラーが返ってきました。
178
+
179
+ MySQL Workbenchdeしました。
180
+
181
+ 上から
182
+
183
+ use データベース名;
184
+
185
+ withから始まる教えて頂いたSQLをペースト
186
+
187
+ となってますがwithの左横にエラーがあった時の赤い×が付いてます。
188
+
189
+
190
+
191
+ indexについては①使い方をよく理解していないこと ②記事を探しましたがどのカラムに対して作成するのが良いのか により手を着けられていません。「現状インデックスがないなら使い物にならないほど低速」とおっしゃっている部分が非常に気になっています。
192
+
193
+ インデックスを使えば解消するのか? またよく見かける記事の「PHP+SQL」や「python+SQL」といった他プログラミング言語でのSQL操作の方が良いのか(他言語は1からの勉強となりますが・・・)。
194
+
195
+ ゆくゆくはSQL内からデータを取り出し他言語で分析というのが目的ではありますが、まずはSQLからと思い質問させていただいています。

1

create table文・insert文の追記

2019/06/08 05:04

投稿

GARYU
GARYU

スコア8

test CHANGED
File without changes
test CHANGED
@@ -37,3 +37,125 @@
37
37
  お手間とは思いますが何も解かってない初心者ですので、ご指導頂けるSQL文の意味も注釈で教えて頂けると今後の為の勉強ともなります。
38
38
 
39
39
  何卒よろしくお願いします。
40
+
41
+
42
+
43
+
44
+
45
+ 《追記》
46
+
47
+ A・Bの二つのテーブルと書きましたが実際はデータインポート用のテーブルを作っておりデータベース内には計3つのテーブルがあります。
48
+
49
+ 質問するにあたり簡素化のつもりで書いたのですが、情報が不正確であったことが何かしらに影響を与えたのでしたら大変申し訳ありません。
50
+
51
+
52
+
53
+ IMPはインポート用・Aは日々読み込んだデータの蓄積用・Bは営業日判別用のつもりで作りました。
54
+
55
+ 以下のcreate table文で3つのテーブルをつくりました。
56
+
57
+ create table IMP (
58
+
59
+ DATE DATE,
60
+
61
+ STOCK_CD CHAR(4),
62
+
63
+ MARKET_CD CHAR(2),
64
+
65
+ STOCK_NAME VARCHAR(100),
66
+
67
+ OPEN float,
68
+
69
+ HIGH float,
70
+
71
+ LOW float,
72
+
73
+ CLOSE float,
74
+
75
+ VOLUME float,
76
+
77
+ MARKET_NAME VARCHAR(20)
78
+
79
+ );
80
+
81
+
82
+
83
+ create table A (
84
+
85
+ DATE DATE,
86
+
87
+ STOCK_CD CHAR(4),
88
+
89
+ MARKET_CD CHAR(2),
90
+
91
+ STOCK_NAME VARCHAR(100),
92
+
93
+ OPEN float,
94
+
95
+ HIGH float,
96
+
97
+ LOW float,
98
+
99
+ CLOSE float,
100
+
101
+ VOLUME float,
102
+
103
+ MARKET_NAME VARCHAR(20)
104
+
105
+ );
106
+
107
+ create table B (
108
+
109
+ DATE date primary key
110
+
111
+ );
112
+
113
+
114
+
115
+ データの取り込みは最初にcsvファイルを保存しMySQL Workbench内のテーブル表示を右クリック「Table Data Import Wizard」でテーブルIMPにデータを取り込み
116
+
117
+ insert into A
118
+
119
+ select
120
+
121
+ DATE,
122
+
123
+ STOCK_CD,
124
+
125
+ MARKET_CD,
126
+
127
+ STOCK_NAME,
128
+
129
+ OPEN,
130
+
131
+ HIGH,
132
+
133
+ LOW,
134
+
135
+ CLOSE,
136
+
137
+ VOLUME,
138
+
139
+ MARKET_NAME
140
+
141
+ from IMP;
142
+
143
+ で本日のデータを前日分までのデータを蓄積しているAに追加しています。
144
+
145
+ insert ignore into B
146
+
147
+ select distinct
148
+
149
+ DATE
150
+
151
+ from IMP;
152
+
153
+ でテーブルIMPから日付のみを同様に前日までの営業日が蓄積されているBに追加しています。
154
+
155
+
156
+
157
+ インポートするcsvファイルは1日 ×4千数百銘柄のデータの形で各カラムと同じ内容の列が並んでいます。
158
+
159
+
160
+
161
+ 何卒ご指導よろしくお願いします。