You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查询:如何筛选不存在'Ended'状态的EventID

PostgreSQL查询实现方案

假设你的数据表名为event_status,你可以用以下两种常见方式实现需求:

方案1:NOT EXISTS实现(推荐,大数据量下性能更好)

SELECT DISTINCT EventID
FROM event_status es1
WHERE NOT EXISTS (
    SELECT 1
    FROM event_status es2
    WHERE es2.EventID = es1.EventID
      AND es2.Status = 'Ended'
);

逻辑说明:遍历所有EventID,排除掉存在对应「Status为Ended的记录」的EventID,DISTINCT用于对结果去重,避免同一个EventID返回多条重复记录。

方案2:GROUP BY+聚合判断实现(写法更简洁)

SELECT EventID
FROM event_status
GROUP BY EventID
HAVING COUNT(*) FILTER (WHERE Status = 'Ended') = 0;

逻辑说明:按EventID分组后,统计每个分组内Status为Ended的记录数量,筛选出数量为0的分组,也就是从未出现过Ended状态的EventID。这里用了PostgreSQL特有的FILTER语法来简化聚合条件的写法,如果你需要兼容其他数据库,可以把COUNT(*) FILTER (WHERE Status = 'Ended')替换成COUNT(CASE WHEN Status = 'Ended' THEN 1 END)。

两种方案执行后都会返回你预期的结果:2、3。

内容的提问来源于stack exchange,提问作者user4587

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:06:03