如何在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
相关产品推荐
相关产品推荐

