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

PostgreSQL按分类分组查询带条件的最大日期实现方法

最优解决方案:条件聚合(仅需1次表扫描,性能远优于多子查询关联)

你不需要使用窗口函数,用更简单的条件聚合就能实现需求,只需要遍历一次表即可完成所有计算,没有多余的关联开销:

SELECT
  surname,
  MAX(CASE WHEN blue_eyes THEN date_of_birth END) AS blue_eyes,
  MAX(CASE WHEN blonde_hair THEN date_of_birth END) AS blonde_hair,
  MAX(CASE WHEN right_handed THEN date_of_birth END) AS right_handed
FROM t_info
GROUP BY surname;

方案说明:

  • 逻辑完全匹配需求:CASE 语句仅当对应布尔字段为真时返回日期,否则返回 NULL,MAX 聚合时会自动忽略 NULL 值,没有符合条件的记录就会返回 NULL,和你预期的输出结果完全一致
  • 性能优势明显:相比多次子查询关联的方案,条件聚合仅需1次全表扫描,数据量越大性能提升越显著
  • 扩展性好:后续如果新增其他布尔条件字段,只需要在SELECT部分新增对应MAX(CASE...)列即可

可选性能优化

如果表数据量很大,可以创建覆盖索引进一步提速,查询可以直接走索引-only扫描,不需要回表读数据:

CREATE INDEX idx_t_info_cover ON t_info (surname, blue_eyes, blonde_hair, right_handed, date_of_birth);

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

相关产品推荐
方舟 Agent Plan

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

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