我目前正在使用postgres 9.1,我正在尝试更新表以将错误值设置为null。特别是我希望设置所有观察值,其中两个观察值之间的月数不等于8到NULL,因为我之前对“变量”的计算将是无效的。
我曾尝试编写条件更新,但没有成功。我正在处理大量的观察(3.5m +),并且必须多次循环这个过程,所以如果可以限制更新的数量,那将是非常棒的。谢谢!
UPDATE table
SET variable = CASE WHEN
(
SELECT
(date_part('year',age(datadate,(lag(datadate, 8) OVER W))) * 12) + date_part('month',age(date_trunc('month',datadate),(lag(date_trunc('month',datadate), 8) OVER W)))
FROM table
WINDOW W AS (PARTITION BY permno ORDER BY datadate)
) != '8'
THEN NULL
ELSE variable END;
答案 0 :(得分:-1)
在您的查询中,您正在更新表中的所有记录,这些记录可以使用where子句缩小为仅需要的行并具有谓词条件。
您可以使用limit和row_number()来限制每个语句执行中更新的行数。
请参阅:http://www.postgresql.org/docs/9.1/static/functions-window.html了解其他分页选项。
如果您的表已经分区,那么您可以使用'only'关键字单独更新每个子表。