Obtuve esta tabla en SQL Server 2005, que se usa para mantener un historial de operaciones de fusión:
Ahora necesito una consulta que tome el FROM_ID original como input, y devuelve el último TO_ID disponible.
Entonces, por ejemplo:
Por lo tanto, la consulta que estoy tratando de armar tomará como input (en la cláusula WHERE supongo) ID 1, y debería darme el último TO_ID disponible como resultado, en este caso 4.
Supongo que necesito un poco de lógica de recursión, pero realmente no sé cómo comenzar.
Gracias !
Mathieu
Usar un CTE funcionaría.
Testscript
DECLARE @IDs TABLE ( FromID INTEGER , ToID INTEGER ) INSERT INTO @IDs SELECT 1, 2 UNION ALL SELECT 2, 3 UNION ALL SELECT 3, 4
Declaración de SQL
;WITH q AS ( SELECT FromID, ToID FROM @IDs UNION ALL SELECT q.FromID, u.ToID FROM q INNER JOIN @IDs u ON u.FromID = q.ToID ) SELECT FromID, MAX(ToID) FROM q WHERE FromID = 1 GROUP BY FromID
Si esto funciona para usted, déle a Lieven la respuesta aceptada, ya que se basa en su código.
;WITH q AS ( SELECT 1 AS LEVEL, FromID, ToID FROM @IDs WHERE FromID=1 UNION ALL SELECT LEVEL + 1, q.FromID, u.ToID FROM q INNER JOIN @IDs u ON u.FromID = q.ToID ) SELECT TOP 1 ToID FROM q ORDER BY LEVEL DESC