簡體   English   中英

SQL Server加入復雜子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM