クエリを結合していくつかのレコードを取得しようとしています。
これが私のクエリの最初の部分です。これはまさに私が望むことを行い、以下に示すように各レコードが 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
検索したいレコードが 1 つある場合はこれで問題ありませんが、複数のレコードに対してこれを行う方法については、彼に固執しています。
メインクエリのサブクエリとしてこれを何らかの方法で内部結合できるかどうか疑問に思っていましたが、それを機能させる方法が見つからないようです。
私が望むのは、pkSDSID
上記のような最初の where 句でハードコードされた 50605 を置き換え、代わりに列または多数のレコードを使用してLastestSDS
、各レコードを取得することです。
例はこれです
50605 と 45670 という 2 つのレコードがあります。
どちらもテーブルにそのような新しいレコードがあります
pkSDSID fkSDSID
50605 NULL
88377 50605
90602 88377
90616 90602
pkSDSID fkSDSID
45670 NULL
50123 45670
51234 50123
60125 51234
したがって、これらの各レコードについて、上記のコードを使用して、それぞれ 90616 と 60125 になる最新のレコードを取得する必要があります。
次に、これらの新しいレコードだけをリストに表示します。
これが理にかなっていることを願っています。私は SQL がそれほど得意ではなく、ここからどこへ行くべきかわかりません。
これは実際に可能ですか?
ありがとうダン