在SQL Server 2005中获得此表,该表用于维护合并操作的历史记录:
现在我需要一个将原始FROM_ID作为输入的查询,并返回最后一个可用的TO_ID。
例如:
所以我试图放在一起的查询将作为输入(在我假设的WHERE子句中)ID 1,并且应该给我最后一个可用的TO_ID,在这种情况下为4。
我想我需要一些递归逻辑,但不知道如何开始。
谢谢!
马修
答案 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