У меня есть таблица с 20 столбцами, и я хочу заполнить последний столбец каждой строки разницей между значением этой строки (для этого столбца) за вычетом стоимости предыдущей строки для одной и той же колонки .. (если время на текущей строке выше, чем время на предыдущей строке)MySQL - Обновить таблицу и установить значение столбца, равное разным значениям текущей строки минус предыдущее значение строки
update tbl set column_with_differences =
(select case when (a.columnWithValueOnSameRow-b.columnWithValueOnPreviousRow) is null
then a.columnWithValueOnSameRow else a.columnWithValueOnSameRow-b.columnWithValueOnPreviousRow end
as tot
from tbl a left join
tbl b
on a.time > b.time);
столбцы с значениями и время - варчар (10).
Я получаю ошибку MySQL
ERROR 1093 (HY000): You can't specify target table 'tbl' for update in FROM clause
Я знаю, что это нормально, чтобы получить эту ошибку, так как я пытающийся обновить таблицу, выбирая из него ..
Любой способ избежать этого ошибка и фактическое обновление значений в таблице с различиями текущей строки минус предыдущая строка?
Большое спасибо.
EDIT:
Мой плохо, я забыл упомянуть, что у меня есть столбец даты, а также уникальный идентификатор для каждой строки ...
Берегись: MySQL содержит * не присущая концепции * порядка строк. Запрос SELECT без предложения ORDER BY может возвращать строки в наборе результатов в любом порядке. Поэтому, если вы хотите идентифицировать «предыдущую» строку в любой строке, вам нужно начать с заказа. Если вы используете «заказ по умолчанию», что бы это ни случилось, * вы будете сожалеть *, когда ваша таблица станет больше. –