你如何获得递归生成的最后一条记录

How do you get the last record generated in a recursive

我在下面的代码中使用 sql 2014 中的递归。

 WITH products AS 
(
 SELECT 
     prd.productID, 
     prd.MainproductID,
     prc.Price,Level = 0, 
     Row_ID = CAST(ROW_NUMBER() OVER (ORDER BY prd.productID) AS VARCHAR(MAX)),
     Level2 = CAST(prd.productID AS VarChar(Max))  
FROM  
  PrdTable prd 
INNER JOIN prd_priceList (NOLOCK) prc ON prd.productID= prc.productID  
WHERE prd.MainproductID IS NULL
UNION ALL
SELECT 
    prd.productID, 
    prd.MainproductID,
    prc.Price,Level +1,
    prcRec.Row_ID + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY prd.MainproductID ORDER BY prd.productID) AS VARCHAR(MAX)),
    Level2 = CAST(prcRec.productID AS VarChar(Max))   + ', ' + prcRec.Level2 
FROM  
  products prcRec 
INNER JOIN PrdTable prd ON prcRec.productID= prd.MainproductID
INNER JOIN prd_priceList (NOLOCK) prc ON prd.productID= prc.productID   

 )  
select  
   productID  , 
   MainproductID , 
   Level,
   Row_ID,
   Level2 
from prodproductsucts

这 return 就像附件截图中的结果。我只想要 select 每个 level.If 的底线没有 child 然后 select 它。但如果有 child 则将转到最新级别并选择最新级别。我还绘制了我需要在屏幕截图中 select 的黄色行。

如果我理解你的要求...

在最终查询中只需添加以下内容 WHERE

... Where productID not in (Select Distinct ISNULL(MainProductID,-999) From products)