fx価格のチャートのデータベースを作っています。
テーブルは「fxprice_eurusd テーブル」と「fxprice_eurusd_1h_chart
テーブル」の2つ、
これをトリガーで繋いでいます。
【テーブルの説明およびトリガーでやろうとしていること】
「fxprice_eurusd テーブル」については
eurusd_price
,
unixtime1h
,
timestamp
の3つのカラムからなっており、eurusd_price
は1分ごとの価格、unixtime1h
は1時間ごとに新しい数字を採番します。
これをトリガーで「fxprice_eurusd_1h_chart
テーブル」に書き写します。
「fxprice_eurusd_1h_chart
テーブル」には、上記に加え、始値、高値、安値が新たに加わります。
「fxprice_eurusd_1h_chart
テーブル」
eurusd_stp
,
eurusd_hip
,
eurusd_lop
,
eurusd_price
,
unixtime1h,(primary key)
timestamp`
始値、高値、安値、現在値とも00分の時に新規数値が入ります。
1分ごとに更新した際、過去の高値を超えたらeurusd_hip
を更新、過去の安値を超えたらeurusd_lop
を更新したいというのが趣旨です。
【困りごと】
下記のトリガーを組みましたが動きません。
mysql
1 2DELIMITER // 3CREATE TRIGGER `fxprice_eurusd_1h_chart` 4AFTER INSERT ON `fxprice_eurusd` 5FOR EACH ROW BEGIN 6INSERT INTO `fxprice_eurusd_1min_chart` SET 7`eurusd_stp`=NEW.`eurusd_price`, 8`eurusd_hip`=NEW.`eurusd_price`, 9`eurusd_lop`=NEW.`eurusd_price`, 10`eurusd_price`=NEW.`eurusd_price`, 11`unixtime1h`=NEW.`unixtime1h`, 12`timestamp`=NEW.`timestamp` 13ON DUPLICATE KEY UPDATE 14`eurusd_hip`=(SELECT GREATEST(OLD.`eurusd_hip`,NEW.`eurusd_price`)), 15`eurusd_lop`=(SELECT LEAST(OLD.`eurusd_lop`,NEW.`eurusd_price`)), 16`eurusd_price`=NEW.`eurusd_price`; 17END; 18// 19DELIMITER;
下記のようにeurusd_hip
やeurusd_lop
を実数にすると動きますので、sqlは間違っていません。
代入ができないようです。
eurusd_hip
=(SELECT GREATEST('3',NEW.eurusd_price
)),
eurusd_lop
=(SELECT LEAST('4',NEW.eurusd_price
)),
上記の'3' や '4' の場所に、現在のeurusd_hip
やeurusd_lop
を代入できれば機能する思うのですが、どのように書けばいいかがわかりません。
ご教示いただきたくお願いいたします。
追伸
old.の文字を付け加えましたが、
#1363 - There is no OLD row in on INSERT trigger
となってしまいました。
old.はupdateで使えるはずなのですが、insertトリガー内のdupricate key updateでは使えないようです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。