INSERT INTO table SET total = :total, 1h = total - (SELECT max(total) FROM table)
INSERT INTO table SET 1h = :total - (SELECT max(total) FROM table), total = :total
INSERT INTO table SET total = :total, 1h = total - (SELECT max(table.total) FROM table)
Задача - одним вызовом к базе вставить в базу новое значение Total, а в колонку 1h вставить разницу между новым значением Total и предыдущим Total.
BEFORE insert триггер - считаем разницу с предыдущим total и записываем в соответствующее поле
Я в качестве подрядчика ставлю у заказчика новую систему. Для сохранения совместимости со старым форматом сбора данных с меня просят сделать такой вариант.
CREATE TRIGGER tr_bi_tablename
BEFORE INSERT ON tablename
FOR EACH ROW
SET NEW.delta_column = NEW.meter_column - COALESCE(( SELECT meter_column
FROM tablename
ORDER BY created_at DESC LIMIT 1), 0);