Rsa97, реально шаманство (это всегда так кажется, когда не знаешь чего то).
Итого: если в первом варианта получалось, что в качестве max() было вставляемое значение и разница получалась 0,
то при перемене месте total и 1h такое ощущение, что max() выдает 0, и 1h получается равным вставляемому total.. Бред. Видимо проще за пару запросов к БД делать - сначала предыдущее значение total получить, а потом уже вставлять новые
Задача - одним вызовом к базе вставить в базу новое значение Total, а в колонку 1h вставить разницу между новым значением Total и предыдущим Total.
Дерьмовая задача.
То, что вы хотите поиметь, называется "переопределённые данные". И в общем случае является bad practice.
Нужна дельта - считайте в запросе.
Ипатьев, у меня тоже самое. Такое ощущение что MySQL считает, что это нельзя делать из других таблиц, и поэтому имя таблицы указывать вообщен не нужно.
Руслан Федосеев, я тоже предположил триггер... и только потом понял, что здесь не обновление строки, а вставка новой, и разница - не с ее предыдущим значением, а с максимумом таблицы до вставки (то есть другой строкой).
Ипатьев, ну ввиду того, что в INSERT таблица указана, во вложенном SELECT используется видимо эта же таблица. Хотя по мне так странно, что нельзя другую таблицу указать, вроде раньше можно было это делать.
Согласен с коллегами которые недоумевают насчет хранения разницы. Хранить её крайне вредно - это дупликация данных, которая вызывает дополнительные сложности с поддержанием консистентности. Разница легко вычисляется при чтении, именно так и нужно поступить.
Я тоже с этим согласен. Но мне нужно настроить передачу данных во внешнюю систему, а там люди говорят - на не нужен накопительный итог, а только разницу за 1 час. Ладно, будем считать перед вставкой и вставлять уже значение.