Sql teradata递归查询场景
我有一个输入表如下Sql teradata递归查询场景,sql,teradata,Sql,Teradata,我有一个输入表如下 Order_id previous_order_id ordertype_opprotunity global_order_id 103 102 "in progress" 11111 102 101 "in progress 22222 101 xx "new order"
Order_id previous_order_id ordertype_opprotunity global_order_id
103 102 "in progress" 11111
102 101 "in progress 22222
101 xx "new order" 33333
我需要递归地检查订单id和以前的订单id,直到订单类型机会匹配新订单,然后选择全局订单id的值。
例如,对于103,prev为102,对于102,prev为101,ordertype_Opportunity为新订单,值为33333。
输出将类似于
Order_id global_order_id
103 33333
有几种方法可以达到预期的效果 您可以从最后一个订单开始,然后沿着链向上,直到找到“新订单”:
WITH RECURSIVE cte AS
(
SELECT t.*, Order_id AS baseOrder_id
FROM tab AS t
WHERE NOT EXISTS -- last order in chain
(
SELECT *
FROM tab AS t2
WHERE t.Order_id = t2.previous_order_id
)
UNION ALL
SELECT t.*, cte.baseOrder_id
FROM tab AS t
JOIN cte
ON t.Order_id = cte.previous_order_id
WHERE cte.ordertype_opprotunity <> 'new order' -- stop when the previous recursion was a "new order"
)
SELECT * FROM cte
WHERE ordertype_opprotunity = 'new order' -- only return the "new order" type
它必须是查询,或者它可以是在最后选择所需内容的存储过程?它应该是一个查询,因为我们希望将其用作查找。有关此问题的任何帮助,请询问您是否有解决方案和详细解释。请确保接受答案作为解决方案,@OmprakashRathi