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

如何查询AcctTypCD变更为HPLS或VPLS的记录及对应操作员工

AcctTypCD变更记录报表最优实现方案

前置说明

你现有存储最新状态的tableA快照表无法直接满足需求,缺少AcctTypCD的历史变更轨迹,你需要先确认有以下任意一种数据支撑:

  • 已构建tableA的缓慢变化维(SCD2)历史表,存储账户每次变更的前后值、变更时间、操作人
  • 数据库已开启CDC变更捕获或操作审计日志,可查询到tableA的所有更新操作记录

实现方案(以最常用的SCD2历史表为例)

假设历史表命名为tableA_his,核心扩展字段包括:prev_accttypcd(变更前的AcctTypCD取值)、change_time(变更操作执行时间)、operate_emp(变更操作执行员工),查询SQL如下:

SELECT 
  t.acctnbr,
  t.prev_accttypcd, -- 变更前类型
  t.accttypcd AS current_accttypcd, -- 变更后类型
  t.change_time,
  t.operate_emp, -- 执行变更的员工
  t.contractdate,
  t.wrkstlct,
  t.wrkstrgn
FROM tableA_his t
WHERE 
  -- 变更后为指定类型
  t.accttypcd IN ('HPLS', 'VPLS')
  -- 变更前不是指定类型,排除初始化就是目标类型的记录
  AND t.prev_accttypcd NOT IN ('HPLS', 'VPLS')
  -- 按需调整时间范围,此处保留你原需求的当月范围
  AND t.change_time BETWEEN TRUNC(SYSDATE,'mm') AND SYSDATE
ORDER BY t.wrkstrgn, t.wrkstlct, t.operate_emp, t.change_time;

如果你的历史表仅存储每日全量快照,没有提前计算变更前值,可以用窗口函数取前一天的状态做对比,SQL如下:

WITH acct_daily_snap AS (
  SELECT 
    *,
    -- 取同一个账户前一天的AcctTypCD值
    LAG(accttypcd,1) OVER (PARTITION BY acctnbr ORDER BY snap_dt) AS prev_accttypcd,
    LAG(emp,1) OVER (PARTITION BY acctnbr ORDER BY snap_dt) AS prev_emp
  FROM tableA_daily_snap
  WHERE snap_dt BETWEEN ADD_MONTHS(TRUNC(SYSDATE,'mm'),-1) AND SYSDATE
)
SELECT 
  acctnbr,
  prev_accttypcd,
  accttypcd AS current_accttypcd,
  snap_dt AS change_dt,
  emp AS operate_emp,
  contractdate,
  wrkstlct,
  wrkstrgn
FROM acct_daily_snap
WHERE 
  accttypcd IN ('HPLS', 'VPLS')
  AND prev_accttypcd NOT IN ('HPLS', 'VPLS')
  AND snap_dt BETWEEN TRUNC(SYSDATE,'mm') AND SYSDATE
ORDER BY wrkstrgn, wrkstlct, operate_emp, change_dt;

方案优势

  • 准确性高:可以完全过滤掉账户初始创建就是HPLS/VPLS的无效记录,只返回真实发生类型变更的条目
  • 性能优异:基于带变更前值的历史表查询时,不需要额外关联计算,索引建好的情况下毫秒级返回结果
  • 完全匹配业务需求:直接返回变更前后类型、操作员工、变更时间等所有要求的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:03