根据另一行中的值更新行中的值
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;
我有一个 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;