访问MySQL触发器中的上一行值

时间:2016-06-19 10:00:04

标签: mysql mysql-workbench mysql-error-1064

我在MySQL的table1中有四列(日期,开放,高,低,关闭, 计算)。我试图找出一种创建触发器的方法,以便在表1中更新新值时,计算字段将使用先前的行值进行更新。我目前正在使用以下触发器使用当前高,当前低和当前关闭来更新计算字段

DELIMITER //
create TRIGGER `updatetable1` before insert ON `table1` FOR EACH ROW begin
    set NEW.Calculation=((NEW.High-New.Low)*0.118)+NEW.Close;
   end //
DELIMITER ;

现在我想使用以下逻辑稍微修改一下公式:

Calculation (i) =((High(i-1) -Low(i-1))*0.118)+Close(i-1);

如何在此触发器中访问上一个行的高,低和关闭值来更新当前计算的行值?

示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以按如下方式重写触发器:

DELIMITER //

create TRIGGER `updatetable1` before insert ON `table1` FOR EACH ROW 
begin
    declare prev_low float;
    declare prev_high float;
    declare prev_close float;

    select   low, high, close
    into     prev_low, prev_high, prev_close 
    from     table1
    order by date desc
    limit 1;

    set NEW.Calculation=(prev_high-prev_low)*0.118 + prev_close;
end//

DELIMITER ;

SQL fiddle

prev_low(和其他变量)的数据类型更改为您在表中使用的任何数据类型。