0

私の問題は、(ソース テーブルである price_daily から派生した) derived_daily テーブルの最後の 2 つの列にデータを入力することです。

(ソーステーブル) price_daily:

sequence        INT(11)         NO    PRI  AUTO_INCREMENT
symbol          VARCHAR(6)      NO    MUL
date            DATE            NO    MUL
high            DECIMAL(8,2)    YES
low             DECIMAL(8,2)    YES
close_adj       DECIMAL(8,2)    YES

(対象テーブル)派生_日次:

symbol           VARCHAR(6)     YES
date             DATE           NO
mov_avg10        DECIMAL(8,2)   YES
std_dev10        DECIMAL(8,2)   YES
range_daily      DECIMAL(8,2)   YES
range_std_dev30  DECIMAL(8,2)   YES

最初の 4 列に以下のコードを入力できます。

INSERT INTO derived_daily(symbol, date, mov_avg10, std_dev10)
(
SELECT t1.symbol, t1.date, AVG(t2.close_adj) AS mov_avg10, STDDEV(t2.close_adj) 
           AS std_dev10 
FROM prices_daily t1 LEFT OUTER JOIN prices_daily t2 
    ON t2.symbol = t1.symbol AND (t1.sequence - t2.sequence)BETWEEN 0 AND 9 
    WHERE t1.symbol = 'C' GROUP BY t1.date
) ; 

しかし、派生テーブルの「range_daily」にこれを入力しようとすると:

INSERT INTO derived_daily(symbol, date, range_daily)
(
SELECT t2.symbol, t2.date, (high - low) AS range_daily 
FROM prices_daily t1 
LEFT OUTER JOIN derived_daily t2 
    ON t2.symbol = t1.symbol AND t2.date = t1.date 
    WHERE t2.symbol = 'C' 
    ORDER BY t2.date
) ; 

それは正しい列に配置されますが、データが欠落している既存の行(range_daily、最終的にはrange_std_dev30)ではなく、新しい行のテーブルの下部に配置されます。いくつかの調整を試みましたが、ほとんどの場合、「エラー 1364、フィールド '日付' にデフォルト値がありません。最後の 2 列を入力して、既にテーブルに配置したものと一致させたい (同じです)。行)、一番下の新しいものではありません。

関連する質問/回答を長い間調べてきましたが、まだ私の問題に関連することはできません (noob... 申し訳ありません)。ヘルプ/アドバイス/その他。大歓迎です!PSは質問を適切にフォーマットすることに取り組んでいますが、イライラしているのでメインの場所(このサイトがトップです)に来なければなりませんでした笑。

ありがとう、トム

4

1 に答える 1