sql - 在 Postgres WHERE 子句中使用 IF 语句

标签 sql postgresql

我有一个包含用户记录的 postgres 表。我想选择 last_visit 时间戳在上周内或帐户是在上周创建的所有记录。但是,如果用户尚未访问过,则 last_visit 时间戳为空(是的,我知道 - 它没有设置为默认帐户创建日期)。

所以我需要选择所有记录,其中或者 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

有什么建议吗?

最佳答案

您可以为此使用 coalesce():

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

coalesce() 从提供的列表中返回第一个非空值。因此,如果 last_visit 为空,则使用 creation_date。否则 last_visit

关于sql - 在 Postgres WHERE 子句中使用 IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231809/

相关文章:

postgresql - Talend 中的 Postgres 游标计算

java - 具有多个 where 条件的右外连接

php - 您在子页面上的 sql 查询如何确定使用哪个菜单导航到该页面?

postgresql - 如何在 postgres 中结合全文搜索和 trigrams

database - PostgreSQL应用程序中的不同时区

macos - 使用 Homebrew 安装的自动启动 PostgreSQL 的正确方法是什么?

python - 使用 sqlalchemy 将字典列表批量复制到 postgres

内联代码的 Javascript 垃圾收集

mysql - 如何在mysql中使用where exists or not exists实现相交

sql - 如果记录存在于 A 中则返回记录,否则如果记录存在于 B 中则返回记录,否则返回 null