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