我有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中使用窗口函数,例如当我尝试运行类似这样的内容时:
UPDATE st_12_test SET x2 = LAG(x1,1) OVER (PARTITION BY mmsi);
任何想法?
您可以创建使用LAG功能的CTE。然后将结果数据用于Update ... From。 假设先前是根据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;
由于您未提供测试数据,所以尚未对其进行测试。但是,它确实通过了语法验证。