Dans le code ci-dessous J'utilise un CTE récursive (Common Table Expression) dans SQL Server 2005 pour essayer de trouver le parent de haut niveau d'une structure hiérarchique de base. La règle de cette hiérarchie est que chaque CustID a ParentID et si le CustID n'a pas de parent alors le ParentID = CustID et il est le plus haut niveau.Comment obtenez-vous le dernier enregistrement généré dans un CTE récursive?
DECLARE @LookupID int
--Our test value
SET @LookupID = 1
WITH cteLevelOne (ParentID, CustID) AS
(
SELECT a.ParentID, a.CustID
FROM tblCustomer AS a
WHERE a.CustID = @LookupID
UNION ALL
SELECT a.ParentID, a.CustID
FROM tblCustomer AS a
INNER JOIN cteLevelOne AS c ON a.CustID = c.ParentID
WHERE c.CustID <> a.CustomerID
)
Donc, si tblCustomer ressemble à ceci:
ParentID CustID
5 5
1 8
5 4
4 1
Le résultat que je reçois du code ci-dessus est la suivante:
ParentID CustID
4 1
5 4
5 5
Ce que je veux est juste la dernière ligne de ce résultat:
ParentID CustID
5 5
Comment d o Je viens de retourner le dernier enregistrement généré dans le CTE (qui serait le plus haut niveau CustID)?
Notez également qu'il existe plusieurs hiérarchies CustID non liées dans cette table, donc je ne peux pas simplement faire un SELECT * FROM tblCustomer WHERE ParentID = CustID. Je ne peux pas commander par ParentID ou CustID parce que le numéro d'identification n'est pas lié à l'endroit où il se trouve dans la hiérarchie.