首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LAG函数更新表

使用LAG函数更新表
EN

Stack Overflow用户
提问于 2020-05-27 23:38:53
回答 1查看 338关注 0票数 1

我有一张st_12_test桌子。

代码语言:javascript
复制
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列(它是空的)。我可以使用如下查询来查看结果:

代码语言:javascript
复制
SELECT  *, lag(x1,1) OVER (PARTITION BY mmsi) AS x2 FROM st_12_test;

但是我无法更新表的x2列。我得到这样的错误:无法在更新中使用窗口函数,例如,当我尝试运行类似以下内容时:

代码语言:javascript
复制
UPDATE st_12_test SET x2 = LAG(x1,1) OVER (PARTITION BY mmsi);

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-28 10:10:26

您可以创建一个使用LAG函数的CTE。然后在Update...From中使用结果数据。假设 previous是基于datetime列定义的,则:

代码语言:javascript
复制
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;  

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62047064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档