У меня есть таблица, которая регистрирует значение от электрических счетчиковобновления Postgres с предыдущей строкой
таблицы выглядит следующим образом
SELECT created_at, value, delta
FROM metervalues
ORDER BY created_at
2013-05-28 07:59:00 | 752105,6 | null
2013-05-28 08:14:00 | 752156,0 | null
2013-05-28 08:29:00 | 752207,2 | null
2013-05-28 08:44:00 | 752259,2 | null
2013-05-28 08:59:00 | 752312,8 | null
2013-05-28 09:14:00 | 752366,4 | null
2013-05-28 09:29:00 | 752417,2 | null
теперь я хочу, чтобы рассчитать расход так
delta(current record) = value(current record) - value(previous record)
It может произойти, что записи добавляются позже, поэтому идентификатор записи не обязательно следует порядку «created_at».
В настоящее время я загружаю данные, используя ruby-скрипт, затем цикл и обновляю записи. Это очень медленно.
Можно ли это решить SQL direct? Я пробовал некоторые образцы с курсорами, но на самом деле не нашел решения.
Привет, отлично, это работает sofar, мне нужно было изменить значение по умолчанию (0) на 0.0, так как значение представляет собой числовое поле. Как получить потребление, обновленное в поле «delta» записей, –
заставило его работать! с new_values как ( SELECT, ид, created_at, "значение", "значение" - лаг ("значение", 1, 0,0) по (порядка по created_at) потребления ОТ metervalues ORDER BY created_at) обновление metervalues как mv set delta = new_values.consumption from new_values где mv.id = new_values.id; –