我在PostgreSQL中有一个带有时间戳列的表,我想修改该表以获得第二个时间戳列,并使用紧接着的连续时间戳的值对其进行种子设定。有没有办法做到这一点?这些表相当大,因此相关的子查询可能会杀死机器。
更具体地说,我想从此走向:
+----+------+ +----+------+------+ | ts | data | | ts | te | data | +----+------+ +----+------+------+ | T | ... | --> | T | U | ... | | U | ... | | U | V | ... | | V | ... | | V | null | ... | +----+------+ +----+------+------+
基本上,我希望能够更好地处理时间点查询(即,给我时间X的数据)。
答案 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中的数据