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

Oracle查询实现案件流转行合并 输出TRANSFER_FROM/TRANSFER_TO列

Oracle 案件用户流转关系统计查询实现

基础信息

  • 源表为案件操作事件全量表,核心字段如下:
    • case_nbr:案件编号
    • event_id:事件唯一ID,随操作发生时间递增
    • event_desc:事件操作描述
    • User_ID:操作人账号ID
  • 输出要求:返回字段为case_nbr、TRANSFER_FROM(流转来源用户)、TRANSFER_TO(流转目标用户);同一用户连续操作不生成流转记录,仅在操作人发生变更时生成流转边,案件首条操作记录的来源用户为空。

实现思路

用Oracle窗口函数LAG()按案件分组、操作顺序排序,取每条记录的上一任操作人,过滤掉当前操作人和上一任操作人相同的冗余记录,剩下的结果就是完整的用户流转链路。

注意:如果event_id无法严格对应操作先后顺序,可将排序字段替换为事件实际发生时间字段。如果存在讨论、办结这类不改变案件所属权的事件,可提前加where条件过滤,减少计算量。

可直接运行的查询语句

WITH event_with_pre_user AS (
    SELECT
        case_nbr,
        User_ID,
        -- 分区取同案件上一条操作的操作人
        LAG(User_ID) OVER (
            PARTITION BY case_nbr 
            ORDER BY event_id ASC
        ) AS last_op_user
    FROM your_case_event_table -- 替换为实际的事件表名
    -- 按需添加过滤条件,例:
    -- WHERE event_desc NOT IN ('发起讨论','办结')
)
SELECT
    case_nbr,
    last_op_user AS TRANSFER_FROM,
    User_ID AS TRANSFER_TO
FROM event_with_pre_user
-- 仅保留操作人发生变更的节点
WHERE last_op_user IS NULL OR last_op_user <> User_ID;

样例匹配验证

针对案件号201的11条测试数据,执行上述语句后会返回3条符合预期的记录:

  1. 案件首条操作人为U67800,无前置操作人,返回(201, NULL, U67800)
  2. 第一次操作人变更为U67999时,返回(201, U67800, U67999)
  3. 第二次操作人变更为U11800时,返回(201, U67999, U11800)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:21:19