[英]SQL Server join complex subquery
我試圖將我的查詢結合到一個連接中以帶回一些記錄。
這是我的查詢的第一部分,這正是我想要的,並返回此結果集中的最新記錄,因為每個記錄通過fkSDSID鏈接到另一個,如下所示,第一個沒有id作為其第一個,沒有以前的記錄。
pkSDSID fkSDSID
50605 NULL
88377 50605
90602 88377
90616 90602
此查詢從結果中返回90616。
DECLARE @LatestSDS INT
with tree as (
SELECT pkSDSID, fkSDSID
FROM tblSDS
WHERE pkSDSID = 50605
UNION ALL
SELECT t1.pkSDSID, t1.fkSDSID
FROM tblSDS t1
JOIN tree p ON p.pkSDSID = t1.fkSDSID
)
SELECT TOP 1 @LatestSDS = pkSDSID FROM tree ORDER BY pkSDSID DESC
SELECT @LatestSDS
如果我有一個我想要找到的記錄,但我現在仍然堅持他如何為多個記錄執行此操作,這很好。
我想知道我是否可以以某種方式內部加入它作為我的主要查詢的子查詢但我似乎無法找到一種方法讓它工作。
我想要的是在上面的第一個where子句pkSDSID
中替換硬編碼的pkSDSID
,而是使用一列或多個記錄並獲得每個記錄的LastestSDS
。
這是一個例子
我有兩個記錄說50605和45670。
他們都有更新的記錄,如表中所示
pkSDSID fkSDSID
50605 NULL
88377 50605
90602 88377
90616 90602
pkSDSID fkSDSID
45670 NULL
50123 45670
51234 50123
60125 51234
因此,對於每個記錄,我需要使用上面的代碼來獲取最新記錄,分別為90616和60125。
然后在列表中顯示這些新記錄。
我希望這是有道理的,我對SQL並不是那么好,我只是不知道從哪里開始。
這有可能嗎?
謝謝丹
Q更新后編輯
DECLARE @t TABLE (pkSDSID int NOT NULL, fkSDSID int NULL);
INSERT @t VALUES
(50605, NULL),
(88377, 50605),
(90602, 88377),
(90616, 90602),
(45670, NULL),
(50123, 45670),
(51234, 50123),
(60125, 51234);
with tree as (
SELECT S.pkSDSID, S.fkSDSID, 0 AS TreeLevel, S.pkSDSID AS TreeTop
FROM @t S
WHERE S.pkSDSID IN (50605, 45670)
UNION ALL
SELECT t1.pkSDSID, t1.fkSDSID, TreeLevel +1, p.TreeTop
FROM @t t1
JOIN tree p ON p.pkSDSID = t1.fkSDSID
)
, Filter AS
(
SELECT
pkSDSID,
ROW_NUMBER() OVER (PARTITION BY TreeTop ORDER BY TreeLevel DESC) AS rn
FROM tree
)
SELECT pkSDSID FROM Filter WHERE rn = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.