Поскольку вы не опубликовали структуру данных, ваш пробег может отличаться.Вот гипотетическая (я знаю ноль о структурах данных биткойн) цепная структура биткойнов.Используйте рекурсивный CTE для создания привязки и самостоятельного вызова.Я использую источник и цель ниже, однако их можно обменять на семантику биткойнов.
Sql Fiddle
DECLARE @T TABLE(ChainID INT, SourceID INT, TargetID INT, Amount INT)
INSERT @T VALUES
(1,100,300,1),
(2,900,800,1),
(1,100,400,1),
(2,800,700,1),
(1,300,200,1),
(1,400,500,1),
(2,700,600,1),
(1,500,600,1),
(1,500,200,1),
(2,600,500,1),
(2,500,400,1)
DECLARE @ChainID INT = 2
--Get the first source of a chain !If natural order, if there is a more suitable order field then use it!
DECLARE @StartID INT = (SELECT SourceID FROM (SELECT SourceID,RN=ROW_NUMBER() OVER (ORDER BY ChainID) FROM @T WHERE ChainID = @ChainID ) AS X WHERE RN=1)
;WITH RecursiveWalk AS
(
--Anchor
SELECT
SourceID,
TargetID = T.TargetID,
LevelID = 1
FROM
@T T
WHERE
T.SourceID = @StartID AND ChainID = @ChainID
UNION ALL
--Recursive bit
SELECT
T.SourceID,
TargetID = T.TargetID,
LevelID = LevelID + 1
FROM
@T T
INNER JOIN RecursiveWalk RW ON T.SourceID = RW.TargetID
WHERE
ChainID=@ChainID
)
SELECT
SourceID,
TargetID,
LevelID
FROM
RecursiveWalk