2014-02-27 65 views
0

我目前使用的是postgres 9.1,我試圖更新一個表來將不正確的值設置爲null。特別是我希望將所有觀察值都設置爲兩個觀測值之間的月數不等於NULL,因爲我之前對「變量」的計算是無效的。Postgres - 有條件地將一個變量設置爲空

我試圖寫一個條件更新,但沒有成功。我正在處理大量的觀測(3.5米+),並且必須多次循環這個過程,所以如果可能限制更新的數量是非常棒的。謝謝!

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

顯示樣本數據和所需結果 –

回答

-1
  1. 在您的查詢,您在其中可以縮小到使用WHERE子句和具有謂詞條件只需要行的表更新中的所有記錄。

  2. 您可以使用limit和row_number()來限制每個語句執行中更新的行數。

其他分頁選項請參考:http://www.postgresql.org/docs/9.1/static/functions-window.html

如果您的表已分區,那麼您可以使用'only'關鍵字分別更新每個子表。

相關問題