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

如何在SQL中对比两日账户数据并添加变更说明伪列

SQL方案:标注每日账户数据的具体变更内容

要实现标注具体变更内容的需求,我们可以通过自连接对比两日数据,并使用CASE语句生成变更描述列。以下是完整的SQL解决方案:

SELECT 
    curr.id,
    curr.Name,
    curr.DS_DW_Id,
    curr.flag_1,
    curr.flag_2,
    CASE
        WHEN curr.Name != prev.Name THEN 'Name Change'
        WHEN curr.DS_DW_Id != prev.DS_DW_Id THEN 'DS_DW_Id Change'
        WHEN curr.flag_1 != prev.flag_1 THEN 'flag_1 Change'
        WHEN curr.flag_2 != prev.flag_2 THEN 'flag_2 Change'
        ELSE 'Multiple Changes'
    END AS "Data Change"
FROM daily_account_data curr
INNER JOIN daily_account_data prev 
    ON curr.id = prev.id
WHERE 
    curr.Insert_date = '2023-06-02'
    AND prev.Insert_date = '2023-06-01'
    AND (
        curr.Name != prev.Name 
        OR curr.DS_DW_Id != prev.DS_DW_Id 
        OR curr.flag_1 != prev.flag_1 
        OR curr.flag_2 != prev.flag_2
    );

方案说明:

  1. 自连接对比:将当日数据(curr别名)与前日数据(prev别名)通过id关联,确保对比同一账户的两日记录。
  2. 过滤变更行:通过WHERE子句筛选出至少一个字段发生变化的记录。
  3. 生成变更描述:使用CASE语句逐一判断每个字段是否发生变化,返回对应的变更说明;若多个字段同时变更,返回Multiple Changes。

扩展说明:

  • 如果需要处理当日新增账户(前日无记录)或前日删除账户(当日无记录),可以将INNER JOIN改为FULL OUTER JOIN,并补充对应的逻辑判断。
  • 若要同时显示多个字段的变更内容,可以使用字符串拼接(如CONCAT函数)组合所有变更描述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:43:26