我有一张带有时间戳的数据表。
t_stamp | col1 | col2 | col3
我想基于表中前一行的col1和col2中的值来更新col3中的值。上一行是指时间戳记值第二低的行。我也想对表中的每一行进行此操作。
例如:
col3 = col1.prev + col2
注意:此处的操作仅作为示例提供。给定col1,col2和/或以前的任何一个函数,我想为col3计算一个值。
我能够使用窗口函数创建SELECT查询,从而为我提供所需的col3值
SELECT lag(col1) OVER (ORDER BY t_stamp ASC) + col2 AS col3
FROM table1
,但这不会更新表中的值。我可以以某种方式将此方法应用于原始表格吗?还是可以用相同的方式格式化更新查询?
答案 0 :(得分:1)
您只需要将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;
答案 1 :(得分:0)
我想你想要一个累加的总和:
SELECT (sum(col2 + co1) OVER (ORDER BY t_stamp ASC) - col1) AS col3
FROM table1
答案 2 :(得分:0)
创建前3列,然后使用Lag创建最后一个列。
答案 3 :(得分:0)
使用Sub查询..将解决..这是一个示例
select col2+p_col1 from
(
SELECT col1, col2, lag(col1) OVER (ORDER BY t_stamp ASC) as p_col1
FROM table1
) t