2015-08-26 86 views
1

我有一個包含用戶記錄的postgres表。我想選擇last_visit時間戳在上週內的所有記錄,或者該帳戶是在上週創建的。但是,如果用戶尚未訪問,則last_visit時間戳記爲空(是的,我知道 - 它未設置爲默認帳戶創建日期)。在Postgres WHERE子句中使用IF語句

所以,我需要選擇所有記錄,其中要麼last_visit是在過去的一週,如果是空,其中creation_date是在上週。

這樣的事情,雖然這不工作(而且也沒有其他幾個可能的語法我已經試過:

SELECT * FROM users 
WHERE 
IF (users.last_active IS NULL) THEN 
value(users.last_visit,timestamp(users.creation_date)) < current timestamp - 7 days 
ELSE 
users.last_active < current timestamp - 7 days 
END IF 

任何意見

回答

2

您可以使用coalesce()這個?

where coalesce(last_visit, creation_date) >= current_timestamp - interval '7' day 

coalesce()返回從提供的列表中的第一個非空值。因此,如果last_visit爲null,creation_date被使用。否則last_visit

+0

你確定你的尖括號指出正確的方法是什麼? –

+0

@DanBracuk:你說得對。這應該是「大於或等於」。謝謝,更正 –

+0

這個問題和其他答案也是錯誤的。 –

0

最簡單的方法很可能是​​3210這兩個值:

SELECT * 
FROM users 
WHERE COALESCE (last_active, creation_date) < 
     CURRENT_TIMESTAMP - INTERVAL '7 DAYS'