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

时间:2016-03-24 14:50:38

标签: sql postgresql time-series

我在PostgreSQL中有一个带有时间戳列的表,我想修改该表以获得第二个时间戳列,并使用紧接着的连续时间戳的值对其进行种子设定。有没有办法做到这一点?这些表相当大,因此相关的子查询可能会杀死机器。

更具体地说,我想从此走向:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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数据类型值执行完全相同的操作。

答案 1 :(得分:0)

选择ts,LEAD(ts)over(order by(select null))为te,table_name中的数据