【发布时间】:2019-10-26 10:26:02
【问题描述】:
我使用的是 PostgreSQL 9.3
我有一个名为 cat 的表,其中包含以下三个感兴趣的列:
ID、SOURCE、TIME
ID 和 TIME 值是唯一的(即没有重复),但有几行具有相同的 SOURCE 值
我想更新SOURCE 列的每个值,将其设置为具有相同SOURCE 值并按TIME 升序排列的每组行中第一个输入行的ID 值。
在SELECT 声明中,我会使用:
SELECT
first_value(ID) OVER (PARTITION BY SOURCE ORDER BY TIME ASC) AS SOURCE
FROM cat;
所以我为UPDATE 声明尝试了这个:
UPDATE cat
SET SOURCE = first_value(ID) OVER (PARTITION BY SOURCE ORDER BY TIME ASC);
返回以下错误:
ERROR: window functions are not allowed in UPDATE
鉴于cat 有大约 800 000 行和 322 列,有人可以帮我找到一种快速的方法吗?
【问题讨论】:
标签: sql postgresql sql-update aggregate-functions common-table-expression