Encuentra el último logging en una cadena de tabla única (SQL Server)

Obtuve esta tabla en SQL Server 2005, que se usa para mantener un historial de operaciones de fusión:

  • Columna FROM_ID (int)
  • Columna TO_ID (int)

Ahora necesito una consulta que tome el FROM_ID original como input, y devuelve el último TO_ID disponible.

Entonces, por ejemplo:

  • ID 1 se fusiona con ID 2
  • Más tarde, ID 2 se fusiona con ID 3
  • Nuevamente más tarde, ID 3 se fusionó con ID 4

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 
Intereting Posts