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

SQL按ID分组取最大日期 兼容完成日期为空场景实现方法

需求梳理
  • 原表结构参考:原数据表结构
  • 目标输出参考:期望查询结果
  • 聚合规则:
    • 按ID字段分组
    • 所有分组均返回组内最大created date(创建日期)
    • 组内存在任意completed date(完成日期)为空的记录时,完成日期字段返回空
    • 组内所有记录完成日期均非空时,返回组内最大完成日期
  • 现存问题:基础GROUP BY聚合无法实现「存在空完成日期时不返回最大完成日期」的分支判断逻辑
SQL实现方案

核心逻辑是先通过条件计数判断分组内是否存在空完成日期,再按规则返回对应值,通用写法兼容绝大多数SQL数据库:

SELECT
    ID,
    MAX(created_date) AS max_created_date,
    CASE
        WHEN COUNT(CASE WHEN completed_date IS NULL THEN 1 END) > 0 THEN NULL
        ELSE MAX(completed_date)
    END AS max_completed_date
-- 替换为实际业务表名
FROM target_table
GROUP BY ID;

注意:执行前请将SQL中的target_table替换为实际使用的数据表名,字段名如果和实际命名有差异也请同步调整

逻辑说明

  • 内层嵌套的CASE语句会在记录的完成日期为空时返回标记值1,非空时返回NULL
  • COUNT函数仅统计非NULL值,计数大于0即代表当前分组存在完成日期为空的记录,此时完成日期字段直接返回NULL
  • 计数为0代表组内无空完成日期记录,正常返回组内最大完成日期即可

若使用PostgreSQL、MySQL 8.0+等支持布尔聚合函数的数据库,空值存在判断可以简化为BOOL_OR(completed_date IS NULL),写法更精简。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:27:22