[英]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.