查找单表链中的最后一条记录(SQL Server)

时间:2010-09-14 14:04:46

标签: sql sql-server-2005 chaining

在SQL Server 2005中获得此表,该表用于维护合并操作的历史记录:

  • 列FROM_ID(int)
  • 列TO_ID(int)

现在我需要一个将原始FROM_ID作为输入的查询,并返回最后一个可用的TO_ID。

例如:

  • ID 1合并为ID 2
  • 稍后,ID 2合并为ID 3
  • 稍后,ID 3将合并到ID 4

所以我试图放在一起的查询将作为输入(在我假设的WHERE子句中)ID 1,并且应该给我最后一个可用的TO_ID,在这种情况下为4。

我想我需要一些递归逻辑,但不知道如何开始。

谢谢!

马修

2 个答案:

答案 0 :(得分:4)

使用CTE可行。

<强> Testscript

DECLARE @IDs TABLE (
  FromID INTEGER
  , ToID INTEGER
)

INSERT INTO @IDs
SELECT           1, 2 
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 4

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           

答案 1 :(得分:3)

如果这对您有用,请给予Lieven接受的答案,因为它基于他的代码。

;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