обновить значение в строке на основе значения в другой строке - PullRequest
0 голосов
/ 14 мая 2019

У меня есть таблица с данными с метками времени.

t_stamp | col1 | col2 | col3

Я хочу обновить значение, скажем, col3, основываясь на значениях в col1 и col2 из предыдущей строки таблицы.Под предыдущей строкой я подразумеваю строку со следующим наименьшим значением метки времени.Я также хочу сделать это для каждой строки в таблице.

Например:

col3 = col1.prev + col2

Примечание. Данная операция приведена только в качестве примера.Я хочу вычислить значение для col3, учитывая функцию col1, col2 и / или предыдущие значения либо.

Я смог использовать оконную функцию, чтобы создать запрос SELECT, чтобы получить нужные значения для col3

SELECT lag(col1) OVER (ORDER BY t_stamp ASC) + col2 AS col3
FROM table1

, но это не обновляет значения в таблице.Можно ли как-то применить это к исходной таблице?Или есть способ отформатировать запрос на обновление таким же образом?

Ответы [ 4 ]

1 голос
/ 14 мая 2019

Вам просто нужно использовать предложение FROM вместе с запросом, который у вас уже есть:

UPDATE test set col3 = prev_col1 + prev_col2
FROM (
  SELECT t_stamp,
      lag(col1) OVER (ORDER BY t_stamp ASC) prev_col1,
      lag(col2) OVER (ORDER BY t_stamp ASC) prev_col2
  FROM test) prev 
  WHERE prev.t_stamp = test.t_stamp;
0 голосов
/ 14 мая 2019

Создайте первые 3 столбца и затем используйте Lag для создания последнего столбца.

Как получить данные предыдущих строк на сервере sql

0 голосов
/ 14 мая 2019

Используйте подзапросы .. решим .. вот пример

select col2+p_col1 from
(
SELECT col1, col2, lag(col1) OVER (ORDER BY t_stamp ASC) as p_col1
FROM table1
) t
0 голосов
/ 14 мая 2019

Я думаю, что вы хотите совокупную сумму:

SELECT (sum(col2 + co1) OVER (ORDER BY t_stamp ASC) - col1) AS col3
FROM table1
...