1

このトピックは私の問題を解決するのに非常に役立ちました。しかし、私は別の問題の解決策を見つけたいと思います。数列がこの01258のように見える場合、欠落しているギャップは3 4 7.完璧な結果ですが、シーケンスが258の場合、結果は同じで、関数は0と1を無視します。ギャップをチェックするようにその関数の変更を手伝ってください。 0から始まりますか?何から始めたらいいのかわからない。ありがとうございました。

4

1 に答える 1

1

提供されたリンクのように欠落している範囲のリストを出力しますが、指定された範囲内です(広範囲にテストされていません)。

実際の値を取得するには、それらを反復処理する必要があります。

CREATE TABLE tempTable AS ...

DECLARE @StartID INT ...
DECLARE @EndID INT ...

SELECT @StartID as gap_starts_at, 
       COALESCE((SELECT MIN(t3.id) -1 FROM tempTable t3
                 WHERE t3.id > @StartID AND t3.id < @EndID), @EndID) as gap_ends_at
FROM tempTable t1
WHERE NOT EXISTS (SELECT t2.id FROM tempTable t2 WHERE t2.id = @StartID)
UNION
SELECT (t1.id + 1) as gap_starts_at, 
       COALESCE((SELECT MIN(t3.id) -1 FROM tempTable t3 WHERE t3.id > t1.id),
                @EndID) as gap_ends_at
FROM #tempTable t1
WHERE NOT EXISTS (SELECT t2.id FROM tempTable t2 WHERE t2.id = t1.id + 1)
      AND id < @EndID

編集:欠落している値を見つけるためのいくつかの方法へ リンクがあります(ただし、範囲で機能するものはないと思いますが、他の値よりも拡張しやすいものもあります。

于 2013-01-04T09:17:21.810 に答える