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

Group By子句返回过多行:如何按CaseID聚合各Stage最新EventDate

问题分析与解决

你的SQL语句问题出在GROUP BY的分组字段:你同时按CaseID和Stage分组,这会让数据库把每个CaseID下的不同Stage当成独立分组,所以每个CaseID会生成对应A/B/C的三行结果,自然出现大量NULL值。

要实现每个CaseID一行、各Stage列显示最新日期的需求,需要调整两个关键点:

  1. 把MAX()函数包裹在CASE表达式外面,确保先筛选对应Stage的日期,再取最大值
  2. GROUP BY只保留CaseID,让数据按CaseID聚合为单行

修正后的SQL语句

SELECT 
    CaseID,
    MAX(CASE WHEN Stage = 'A' THEN EventDate END) AS A,
    MAX(CASE WHEN Stage = 'B' THEN EventDate END) AS B,
    MAX(CASE WHEN Stage = 'C' THEN EventDate END) AS C
FROM
    StageTable
GROUP BY 
    CaseID

执行结果

CaseIDABC
101/01/1001/04/1001/05/10
202/01/1002/02/1002/05/10

逻辑说明

  • MAX(CASE WHEN Stage = 'A' THEN EventDate END):先筛选当前CaseID下所有Stage为A的EventDate,再取其中的最大值;如果某个CaseID没有对应Stage,会返回NULL,但MAX会自动忽略不匹配的NULL值,不影响有效数据的展示
  • GROUP BY仅按CaseID分组,确保每个CaseID只生成一行结果,所有Stage的最新日期都会聚合到这一行中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:42:18