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

DB2 LUW数据库检测指定account_type列表内值变更的SQL查询需求

DB2 LUW 账户类型变更筛选SQL实现

前提假设

  • 业务表名暂定为 client_accounts,可根据实际表名替换
  • client + customer_org_ID 为唯一账户识别键,用于关联同一账户的历史版本
  • 表中保留账户所有历史变更版本(即每次更新插入新行,而非覆盖旧数据),如果仅存储最新数据需要关联对应审计历史表使用

实现逻辑

  • 用DB2内置的LAG()窗口函数提取同一账户上一版本的account_type值
  • 筛选规则:
    • 仅保留account_type发生变更的记录,排除仅active_Y_N或其他字段变更的场景
    • 覆盖两类变更:转入(旧值不在指定列表、新值在列表)、转出(旧值在指定列表、新值不在列表)

完整SQL代码

WITH account_version AS (
    SELECT 
        client,
        account_type,
        customer_org_ID,
        insert_date,
        update_date,
        active_Y_N,
        -- 按更新时间排序,取同一账户上一版本的账户类型
        LAG(account_type, 1) OVER (
            PARTITION BY client, customer_org_ID 
            ORDER BY update_date ASC, insert_date ASC
        ) AS prev_account_type
    FROM client_accounts
)
SELECT 
    client,
    account_type,
    customer_org_ID,
    insert_date,
    update_date,
    active_Y_N
FROM account_version
WHERE 
    -- 账户类型确实发生变更
    account_type <> prev_account_type
    -- 变更前后至少有一个值属于指定列表,覆盖转入/转出场景
    AND (
        account_type IN ('CAM','CAMADP','CAMHD','CAMHDADP','DIST','DISTADP','GAM','GAMADP','LAM','LAMADP')
        OR prev_account_type IN ('CAM','CAMADP','CAMHD','CAMHDADP','DIST','DISTADP','GAM','GAMADP','LAM','LAMADP')
    )
-- 若需要过滤账户首次新增的记录,可添加条件 AND prev_account_type IS NOT NULL
-- 若只需要返回最新变更记录,可添加 ORDER BY update_date DESC FETCH FIRST 1 ROWS ONLY

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03