我有一张st_12_test桌子。
CREATE TABLE public.st_12_test
(
mmsi numeric,
x1 double precision,
y1 double precision,
datetime timestamp without time zone,
x2 double precision,
y2 double precision,
linetime double precision
)我试图通过在列x1中添加前一行的值来更新x2列(它是空的)。我可以使用如下查询来查看结果:
SELECT *, lag(x1,1) OVER (PARTITION BY mmsi) AS x2 FROM st_12_test;但是我无法更新表的x2列。我得到这样的错误:无法在更新中使用窗口函数,例如,当我尝试运行类似以下内容时:
UPDATE st_12_test SET x2 = LAG(x1,1) OVER (PARTITION BY mmsi);有什么想法吗?
发布于 2020-05-28 10:10:26
您可以创建一个使用LAG函数的CTE。然后在Update...From中使用结果数据。假设 previous是基于datetime列定义的,则:
with ts12cte (mmsi, datetime, prev_x) as
( select mmsi, datetime
, lag(x1) over (partition by mmsi order by mmsi, datetime)
from st_12_test
)
update st_12_test st
set x2 = cte.prev_x
from ts12cte cte
where st.mmsi = cte.mmsi
and st.datetime = cte.datetime; 由于您未提供测试数据,因此尚未对其进行测试。但是,它确实通过了语法验证。
https://stackoverflow.com/questions/62047064
复制相似问题