Postgres - 有条件地将变量设置为null

时间:2014-02-27 17:44:15

标签: postgresql sql-update postgresql-9.1

我目前正在使用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;

1 个答案:

答案 0 :(得分:-1)

  1. 在您的查询中,您正在更新表中的所有记录,这些记录可以使用where子句缩小为仅需要的行并具有谓词条件。

  2. 您可以使用limit和row_number()来限制每个语句执行中更新的行数。

  3. 请参阅:http://www.postgresql.org/docs/9.1/static/functions-window.html了解其他分页选项。

    如果您的表已经分区,那么您可以使用'only'关键字单独更新每个子表。