【问题标题】:Postgres - conditionally setting a variable to nullPostgres - 有条件地将变量设置为 null
【发布时间】:2014-02-27 17:44:15
【问题描述】:

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

【问题讨论】:

  • 显示样本数据和想要的结果

标签: postgresql sql-update postgresql-9.1


【解决方案1】:
  1. 在您的查询中,您正在更新表中的所有记录,这些记录可以使用 where 子句和谓词条件缩小到只需要的行。

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

其他分页选项请参考:http://www.postgresql.org/docs/9.1/static/functions-window.html

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

【讨论】:

    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多