使用LAG函数更新表

问题描述 投票:0回答:1

我有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);

任何想法?

postgresql sql-update lag
1个回答
0
投票

您可以创建使用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;  

由于您未提供测试数据,所以尚未对其进行测试。但是,它确实通过了语法验证。

© www.soinside.com 2019 - 2024. All rights reserved.