Sql 在postgreswhere子句中使用IF语句

Sql 在postgreswhere子句中使用IF语句,sql,postgresql,Sql,Postgresql,我有一个postgres表,里面有用户记录。我想选择上一次访问时间戳在上周内或帐户是在上周创建的所有记录。但是,如果用户还没有访问,最后的访问时间戳是空的是的,我知道-它没有设置为默认的帐户创建日期 因此,我需要选择所有记录,其中最后一次访问是在最后一周,如果为空,则创建日期是在最后一周 类似这样的东西,虽然这不起作用,我尝试过的十几种可能的语法也不起作用: SELECT * FROM users WHERE IF (users.last_active IS NULL) THEN value

我有一个postgres表,里面有用户记录。我想选择上一次访问时间戳在上周内或帐户是在上周创建的所有记录。但是,如果用户还没有访问,最后的访问时间戳是空的是的,我知道-它没有设置为默认的帐户创建日期

因此,我需要选择所有记录,其中最后一次访问是在最后一周,如果为空,则创建日期是在最后一周

类似这样的东西,虽然这不起作用,我尝试过的十几种可能的语法也不起作用:

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
有什么建议吗?

您可以使用coalesce:

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

coalesce从提供的列表中返回第一个非空值。因此,如果上次访问为空,则使用创建日期。否则,上次访问最简单的方法可能是合并这两个值:

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

@丹布拉克:你说得对。这应该是更大或相等的。谢谢,我的问题和其他答案都错了。