私の問題は、(ソース テーブルである 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は質問を適切にフォーマットすることに取り組んでいますが、イライラしているのでメインの場所(このサイトがトップです)に来なければなりませんでした笑。
ありがとう、トム