我有一个场景,我经常需要在定义工作流程订单定义的表中维护记录,以添加和删除将 ID 置于非交易订单中的阶段(事后无法更改 ID)。
我需要一种排序方式(或其他)方法来选择记录并显示它们将执行的顺序以轻松管理它们,但无法找到解决方案,尽管相信我会缺少一个明显的解决方案。 Parent_id 中的 NULL 是工作流程的开始。
简单记录示例:
id strategy_id stage parent_id
74 15 REMINDER_01 NULL
99 15 WARNING_06 74
76 15 WARNING_05 75
91 15 WARNING_08 76
78 15 WARNING_07 91
75 15 DEMAND_01 99
订单我需要他们返回以便轻松处理它们并查看订单:
id strategy_id stage parent_id
74 15 REMINDER_01 NULL
99 15 WARNING_06 74
75 15 DEMAND_01 99
76 15 WARNING_05 75
91 15 WARNING_08 76
78 15 WARNING_07 91
我尝试根据这个概念寻找解决方案,但相信我使用了错误的术语,因此没有得到任何匹配的内容。
使用
recursive
方法和数据库来生成您的解决方案。我已使用 Postgres
和版本 16
来生成解决方案。
工作查询:
WITH RECURSIVE orderWorkflow AS (
SELECT id, strategy_id, stage, parent_id, 0 AS level
FROM mytable
WHERE parent_id IS NULL
UNION ALL
SELECT t.id, t.strategy_id, t.stage, t.parent_id, wo.level + 1 AS level
FROM mytable t
INNER JOIN orderWorkflow wo ON t.parent_id = wo.id
)
SELECT id, strategy_id, stage, parent_id
FROM orderWorkflow
ORDER BY level, id;
工作演示: