根据另一行中的值更新行中的值

update value in row based on value in another row

我有一个 table 带有时间戳的数据。

t_stamp | col1 | col2 | col3

我想根据 table 中前一行的 col1 和 col2 中的值更新 col3 中的值。前一行是指具有下一个最低时间戳值的行。我还想对 table.

中的每一行执行此操作

例如:

col3 = col1.prev + col2

注意:此处的操作仅作为示例。给定 col1、col2 的函数,我想计算 col3 的值 and/or 两者的先前值。

我能够使用 window 函数创建 SELECT 查询来为 col3

提供所需的值
SELECT lag(col1) OVER (ORDER BY t_stamp ASC) + col2 AS col3
FROM table1

但这不会更新 table 中的值。我能以某种方式将其应用于原始 table 吗?或者有没有办法以相同的方式格式化更新查询?

我想你想要一个累计数:

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

创建前 3 列,然后使用 Lag 创建最后一列。

使用子查询..将解决..这是一个示例

select col2+p_col1 from
(
SELECT col1, col2, lag(col1) OVER (ORDER BY t_stamp ASC) as p_col1
FROM table1
) t

您只需将 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;