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

使用Min/Max取起止日期时如何正确保留最晚日期空值

问题说明

数据处理规则如下:

  • 取分组内最早日期作为Start date(开始日期)
  • 分组内存在有效最晚日期时,将该值设为end date(结束日期)
  • 分组内日期字段存在空值时,代表对应人员仍处于激活状态,结束日期需保留空值
    直接对日期字段使用Min()、Max()聚合函数实现时,日期为空的场景下无法正确返回空值的结束日期——聚合函数默认会自动跳过空值,会错误返回组内现存的最大日期,和需求不符。
    问题示例
解决方法

核心逻辑调整:不要直接对日期字段取最大值,先判断同组内是否存在空日期记录,存在则直接返回空作为结束日期,不存在时再计算组内最大日期。
不同场景参考代码:

SQL 实现

SELECT
  user_id,
  MIN(date_col) AS `Start date`,
  CASE
    WHEN SUM(CASE WHEN date_col IS NULL THEN 1 ELSE 0 END) > 0 THEN NULL
    ELSE MAX(date_col)
  END AS `end date`
FROM source_table
GROUP BY user_id;

DAX(Power BI/Excel 数据模型)实现

end date = 
IF(
    COUNTBLANK('source_table'[date_col]) > 0,
    BLANK(),
    MAX('source_table'[date_col])
)

Pandas(Python)实现

import pandas as pd

# 按人员分组计算开始日期
res = df.groupby('user_id', as_index=False).agg(
    **{'Start date': ('date_col', 'min')}
)
# 单独计算结束日期:组内有空值则返回空,否则取最大日期
res['end date'] = res['user_id'].map(
    df.groupby('user_id')['date_col'].apply(lambda x: None if x.isna().any() else x.max())
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.07 16:15:42