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

Dataiku分组聚合需求:按频率选值,频率相同时取最新日期值

解决方案(Dataiku Compute Recipe 自定义SQL聚合优化)

一、简化各值次数统计(消除冗余CASE)

直接用条件聚合实现,无需重复编写冗余分支,在Dataiku自定义聚合区域添加以下字段:

  • nb_a: SUM(CASE WHEN Col1 = 'a' THEN 1 ELSE 0 END)
  • nb_b: SUM(CASE WHEN Col1 = 'b' THEN 1 ELSE 0 END)
  • nb_c: SUM(CASE WHEN Col1 = 'c' THEN 1 ELSE 0 END)
  • nb_Null: SUM(CASE WHEN Col1 IS NULL THEN 1 ELSE 0 END)

二、实现greatest列的逻辑(处理频率相同取最新日期)

核心思路是通过窗口函数先计算每个ID下各Col1值的出现频次、对应最新日期,再按「频次降序→日期降序」排序,取优先级最高的映射值。在自定义聚合中添加greatest字段,SQL表达式如下:

FIRST_VALUE(
    CASE 
        WHEN Col1 = 'a' THEN 'Hi'
        WHEN Col1 = 'b' THEN 'Hello'
        WHEN Col1 = 'c' THEN 'Welcome'
        WHEN Col1 IS NULL THEN 'Unknown'
    END
) OVER (
    PARTITION BY ID 
    ORDER BY 
        SUM(CASE WHEN Col1 = COALESCE(Col1, 'NULL') THEN 1 ELSE 0 END) OVER (PARTITION BY ID, COALESCE(Col1, 'NULL')) DESC,
        MAX(Date) OVER (PARTITION BY ID, COALESCE(Col1, 'NULL')) DESC
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS greatest

逻辑说明:

  1. 内层窗口函数SUM(...) OVER (PARTITION BY ID, COALESCE(Col1, 'NULL')):计算每个ID下,Col1各值(含Null)的出现次数
  2. 内层窗口函数MAX(Date) OVER (PARTITION BY ID, COALESCE(Col1, 'NULL')):计算每个ID下,Col1各值对应的最新日期
  3. FIRST_VALUE按「频次降序→日期降序」排序后取第一个映射值,完美覆盖「频率相同取最新日期」的规则

三、Dataiku Compute Recipe配置步骤

  1. 新建Compute Recipe,选择分组模式
  2. 分组列选择ID
  3. 在「自定义聚合」标签页,依次添加上述nb_a、nb_b、nb_c、nb_Null、greatest字段及其对应的SQL表达式
  4. 运行Recipe即可得到目标数据集

内容的提问来源于stack exchange,提问作者Pierre-Yves Mimpontel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:55:21