繁体   English   中英

使用下一行的值将列添加到表中

[英]Adding column to table with value from next row

我在 PostgreSQL 中有一个带有时间戳列的表,我想修改该表以具有第二个时间戳列,并用紧接着的时间戳的值作为种子。 有没有办法做到这一点? 表相当大,因此相关子查询可能会杀死机器。

更具体地说,我想从这个到那个:

+----+------+           +----+------+------+
| ts | data |           | ts | te   | data |
+----+------+           +----+------+------+
| T  | ...  |    -->    | T  | U    | ...  |
| U  | ...  |           | U  | V    | ...  |
| V  | ...  |           | V  | null | ...  |
+----+------+           +----+------+------+

基本上,我希望能够更好地处理时间点查询(即,给我时间 X 的数据)。

基本上我认为您可以在查询时检索时间戳,而不是将其存储在表中,但是如果您正在执行此类操作并认为这就是您所需要的,那么:

您需要将该列添加到您的表中:

ALTER TABLE tablename ADD COLUMN te timestamp;

然后使用LEAD窗口函数执行更新值。

UPDATE tablename t
SET te = x.te
FROM (
  SELECT ts, lead(ts, 1) OVER (order by ts) AS te
  FROM tablename t2
  ) x
WHERE t.ts = x.ts

这是使用示例整数数据如何工作的示例: SQL Fiddle

它将对timestamp数据类型值执行完全相同的操作。

select ts,LEAD(ts) over(order by (select null)) as te,data from table_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM