我在PostgreSQL 9.2中有以下包含时间戳的表:
gid [PK] (bigserial), timestamp_mes (timestamp without time zone), time_diff (interval)
1, 2012-01-23 11:03:40, empty
2, 2012-01-23 11:03:42, empty
3, 2012-01-23 11:03:44, empty
我已添加了一个区间列(time_diff),并希望用此查询结果中的时间差值来填充它:
SELECT timestamp_mes - lag(timestamp_mes, 1)
over (order by timestamp_mes) as diff
from gc_entretien.trace order by timestamp_mes
我尝试了以下查询来更新time_diff列,但没有成功:
UPDATE gc_entretien.trace set time_diff =
(SELECT trace.timestamp_mes - lag(trace.timestamp_mes, 1)
over (order by trace.timestamp_mes)
from gc_entretien.trace order by timestamp_mes);
出现了错误:
ERROR: 子查询作为表达式返回了多行
我该如何继续,才能使用时间差查询的结果来更新time_diff列的值?
UPDATE
中所做的那样)导致错误...如果结果在您的SELECT
中返回的第一行中,则使用LIMIT 1
使分配成为可能。无论如何,选择似乎设计不正确。 - Kamil ŠrotLIMIT 1
只会返回顶部行,而不是与当前行有关的行。 - Clockwork-MuseUPDATE
查询中...通常情况下,在子查询的WHERE
子句中使用来自正在更新的表(响应行)的一些标识符/值作为条件。但坦白地说:我不理解应用程序的逻辑,甚至不想理解 :-) - Kamil Šrot