2016-12-10 12 views
0

私はセカンダリテーブルにデータを挿入しようとしており、ローリングクローズ値を計算して新しいテーブルに挿入するにはサブクエリが必要です。INSERTサブクエリのMySQL構文エラー

  1. いずれかの値の数と一致しない列の数、または
  2. 構文エラーが

私が先テーブルという検証しています:私は、クエリをしようとすると、私は2つのエラーのいずれかを取得していますinsert文で参照されるすべてのカラムを持ちます。どんな助けもありがとう。

INSERT INTO `Historical`.`Secondary`(
`Record`, 
    `Symbol`, 
    `Date`, 
    `Open`, 
    `High`, 
    `Low`, 
    `Close`, 
    `Volume`, 
    `Rolling_Close`) 

SELECT 
T1.Date, T1.Symbol, T1.Close, 

(
SELECT AVG(T2.Close) 

FROM Historical.Primary T2 

WHERE T1.Symbol = T2.Symbol 

AND T2.Date BETWEEN DATE_SUB(T1.Date, INTERVAL 30 DAY) 

AND DATE_SUB(T1.Date, INTERVAL 1 DAY)) AS Rolling_Close 

FROM Historical.Primary T1 

GROUP BY T1.Date, 

T1.Symbol; 

テーブルHistorical.Secondaryは、次の列があります、

Rolling_Close

録音、記号、日付、始値、高値、低、閉じる、ボリュームテーブルHistorical.Primaryは以下がありますがコラム:

録音、記号、日付、始値、高値、低、閉じる、ボリューム

+1

1この結果を生成します - あなたは、挿入のために定義されているようにフィールドの同じ番号を選択する必要が(と彼らは同じである必要注文と正しいタイプ)、2 - あなたはからぶら下がっている。 3 - ブラケットが見つからないおそらく他のサンプルデータを公開できますか? –

+0

1. 9つの列のそれぞれが、Historical.Secondaryで使用可能な宛先列を持っていることを検証し、正しい順序で名前が一致するようにしました。 2. FROMが何を意味するのか分かりません。それを理解するのを助けて、解決するためにどのような措置を講じることができますか?クエリは実行されないので、すべての列に対してNULLを取得しているため、公開するサンプルデータの種類はわかりません。これまでの助けてくれてありがとう。根本的な原因を助けるために他に何ができるのか教えてください。私はかなり新しいので、私は忍耐を感謝します。 – Hogateer

+0

9列を挿入していますが、4つしか選択していません。セカンダリについては混乱しています。シンボル内に日付があるようですが、クエリはシンボル内にあります。 –

答えて

0

あなたのテーブルとデータを想定すると、この

のようになり
drop table if exists secondary; 
create table secondary (record int auto_increment primary key,symbol int,dt date,open int, high int, low int,close int,volume int, rolling_close decimal(10,2)); 

drop table if exists prmary; 
create table prmary (record int auto_increment primary key,symbol int,dt date,open int, high int, low int,close int,volume int); 

alter table prmary 
    add key k001(symbol,dt); 

MariaDB [sandbox]> select * from prmary order by symbol,record; 
+--------+--------+------------+------+------+------+-------+--------+ 
| record | symbol | dt   | open | high | low | close | volume | 
+--------+--------+------------+------+------+------+-------+--------+ 
|  1 | 707 | 2007-08-01 | NULL | NULL | NULL | 242 | NULL | 
|  3 | 707 | 2007-08-02 | NULL | NULL | NULL |  7 | NULL | 
|  5 | 707 | 2007-08-03 | NULL | NULL | NULL |  4 | NULL | 
|  7 | 707 | 2007-08-04 | NULL | NULL | NULL |  2 | NULL | 
|  2 | 712 | 2007-08-01 | NULL | NULL | NULL | 415 | NULL | 
|  4 | 712 | 2007-08-02 | NULL | NULL | NULL |  4 | NULL | 
|  6 | 712 | 2007-08-03 | NULL | NULL | NULL |  7 | NULL | 
|  8 | 712 | 2007-08-04 | NULL | NULL | NULL |  5 | NULL | 
+--------+--------+------------+------+------+------+-------+--------+ 
8 rows in set (0.00 sec) 

このクエリ

truncate table secondary; 
insert into secondary 
(`Record`, `Symbol`, `Dt`,`Open`, `High`, `Low`,`Close`,`Volume`,`Rolling_Close` 
) 
SELECT record,T1.Symbol, T1.Dt,open, high, low,t1.close,volume, 
(
SELECT avg(t2.close) 
FROM Prmary T2 
WHERE T1.Symbol = T2.Symbol 
AND T2.Dt BETWEEN DATE_SUB(T1.Dt, INTERVAL 30 day) 
AND DATE_SUB(T1.Dt, INTERVAL 0 day) 
) AS Rolling_Close 
FROM Prmary T1 
GROUP BY t1.symbol,t1.dt; 

MariaDB [sandbox]> select * from secondary order by symbol, record; 
+--------+--------+------------+------+------+------+-------+--------+---------------+ 
| record | symbol | dt   | open | high | low | close | volume | rolling_close | 
+--------+--------+------------+------+------+------+-------+--------+---------------+ 
|  1 | 707 | 2007-08-01 | NULL | NULL | NULL | 242 | NULL |  242.00 | 
|  3 | 707 | 2007-08-02 | NULL | NULL | NULL |  7 | NULL |  124.50 | 
|  5 | 707 | 2007-08-03 | NULL | NULL | NULL |  4 | NULL |   84.33 | 
|  7 | 707 | 2007-08-04 | NULL | NULL | NULL |  2 | NULL |   63.75 | 
|  2 | 712 | 2007-08-01 | NULL | NULL | NULL | 415 | NULL |  415.00 | 
|  4 | 712 | 2007-08-02 | NULL | NULL | NULL |  4 | NULL |  209.50 | 
|  6 | 712 | 2007-08-03 | NULL | NULL | NULL |  7 | NULL |  142.00 | 
|  8 | 712 | 2007-08-04 | NULL | NULL | NULL |  5 | NULL |  107.75 | 
+--------+--------+------------+------+------+------+-------+--------+---------------+ 
8 rows in set (0.00 sec)