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

如何在PostgreSQL表中通过对比同一id的日期值过滤id?

筛选FirstDate与SecondDate不相等的ID

你的PostgreSQL表数据如下:

id      fid               val
401411677   3765    2019-09-06 00:00:00.000
401411677   3782    2019-09-06 00:00:00.000
401413382   3765    2019-12-20 00:00:00.000
401413382   3782    2019-12-23 00:00:00.000
401412111   3765    2019-09-20 00:00:00.000
401412111   3782    2019-09-20 00:00:00.000

其中fid=3765对应FirstDate,fid=3782对应SecondDate,需要保留两个日期不相等的ID,以下是两种可行的SQL方案:

方法一:自连接查询

通过自连接关联同一ID的两个日期记录,直接比较日期值:

SELECT DISTINCT a.id
FROM your_table a
JOIN your_table b ON a.id = b.id
WHERE a.fid = 3765 
  AND b.fid = 3782 
  AND a.val != b.val;
  • 说明:DISTINCT确保每个ID只返回一次,避免重复结果;若日期字段可能存在NULL,建议用IS DISTINCT FROM替代!=,以正确处理NULL值的比较。

方法二:条件聚合+分组筛选

通过分组和条件聚合分别提取两个日期,再比较是否不等:

SELECT id
FROM your_table
WHERE fid IN (3765, 3782)
GROUP BY id
HAVING MAX(CASE WHEN fid=3765 THEN val END) != MAX(CASE WHEN fid=3782 THEN val END);
  • 说明:先筛选出目标fid的记录,按id分组后,用CASE语句分别取出FirstDate和SecondDate,最后通过HAVING子句过滤出日期不等的ID。同样,若存在NULL值,替换为IS DISTINCT FROM即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:15:11