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

MySQL中创建IS active布尔列标记重复项(参考Tableau逻辑)

在MySQL中实现类似Tableau FIXED逻辑的IS_active布尔列

核心逻辑说明

对应你在Tableau中使用的FIXED caseid : max(visitdate)=visitdate逻辑,目标是:

  • 同一caseid下,仅最新visitdate的记录标记为TRUE
  • 同一caseid下的旧记录标记为FALSE
  • 单个caseid仅一条记录时,默认标记为TRUE

方法1:查询时动态计算(MySQL 8.0+ 推荐)

利用窗口函数MAX() OVER (PARTITION BY)直接分组计算每组的最大日期,对比当前行日期即可:

SELECT 
    caseid,
    visitdate,
    CASE 
        WHEN visitdate = MAX(visitdate) OVER (PARTITION BY caseid) 
        THEN TRUE 
        ELSE FALSE 
    END AS is_active
FROM your_table;

方法2:添加持久化生成列(MySQL 8.0.13+)

如果需要将is_active作为表的固定列持久存储,可使用生成列:

ALTER TABLE your_table
ADD COLUMN is_active BOOLEAN 
GENERATED ALWAYS AS (
    CASE 
        WHEN visitdate = (SELECT MAX(visitdate) FROM your_table t WHERE t.caseid = your_table.caseid) 
        THEN TRUE 
        ELSE FALSE 
    END
) STORED;

注:生成列会自动维护,当表中visitdate或caseid数据变更时,is_active值会同步更新。

方法3:兼容MySQL 5.x版本(无窗口函数)

通过子查询预先计算每组的最大日期,再关联原表对比:

SELECT 
    t1.caseid,
    t1.visitdate,
    CASE 
        WHEN t1.visitdate = t2.max_visit 
        THEN TRUE 
        ELSE FALSE 
    END AS is_active
FROM your_table t1
INNER JOIN (
    SELECT caseid, MAX(visitdate) AS max_visit
    FROM your_table
    GROUP BY caseid
) t2 ON t1.caseid = t2.caseid;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:30:37