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

如何用SQL查询指定步骤为工作流最后进阶步骤的记录

用关联SQL实现指定步骤为对象最后进阶步骤的查询

表结构与数据

WORKFLOW表

ID_WORKFLOWID_STEPID_OBJECT
1001BUSNIESS_OBJECT_1
1012BUSNIESS_OBJECT_1
1023BUSNIESS_OBJECT_1
1034BUSNIESS_OBJECT_1
1045BUSNIESS_OBJECT_1
1051BUSNIESS_OBJECT_2
1062BUSNIESS_OBJECT_2
1073BUSNIESS_OBJECT_2

STEP表

ID_STEPCODELEVEL
1STEP_110
2STEP_220
3STEP_330
4STEP_440
5STEP_550

查询需求

查询WORKFLOW表中满足以下两个条件的记录:

  • 关联的STEP表中CODE为指定值(例如STEP_3);
  • 该步骤是对应ID_OBJECT的最后进阶步骤(即该对象关联的所有STEP中LEVEL值最大)。

示例:当筛选STEP.CODE='STEP_3'时,仅返回ID_WORKFLOW=107——因为BUSNIESS_OBJECT_1存在LEVEL更高的步骤(40、50均大于30),所以ID_WORKFLOW=102不符合要求。

实现方案:无需游标,用关联SQL即可完成

完全不需要使用游标,通过关联子查询或窗口函数就能实现需求,以下是两种常见写法:

写法1:关联子查询

SELECT w.*
FROM WORKFLOW w
JOIN STEP s ON w.ID_STEP = s.ID_STEP
WHERE s.CODE = 'STEP_3' -- 替换为目标CODE值
AND s.LEVEL = (
    SELECT MAX(s2.LEVEL)
    FROM WORKFLOW w2
    JOIN STEP s2 ON w2.ID_STEP = s2.ID_STEP
    WHERE w2.ID_OBJECT = w.ID_OBJECT
);

写法2:窗口函数(大数据量场景更高效)

WITH ObjectMaxStep AS (
    SELECT 
        w.ID_WORKFLOW,
        w.ID_OBJECT,
        s.CODE,
        s.LEVEL,
        MAX(s.LEVEL) OVER (PARTITION BY w.ID_OBJECT) AS MaxLevel
    FROM WORKFLOW w
    JOIN STEP s ON w.ID_STEP = s.ID_STEP
)
SELECT ID_WORKFLOW, ID_OBJECT
FROM ObjectMaxStep
WHERE CODE = 'STEP_3' -- 替换为目标CODE值
AND LEVEL = MaxLevel;

说明

  • 两种写法均能精准筛选符合要求的记录,无需游标这类循环逻辑;
  • 窗口函数写法在数据量较大时性能更优,仅需扫描表一次;
  • 替换代码中的'STEP_3'即可适配不同的查询目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:10:50