私はIDのテーブルを持っており、位置SQL内のグループ内で順不同の値を見つける方法は?
CREATE TABLE #MissingSequence (ID INT NOT NULL, Position INT NOT NULL)
INSERT INTO #MissingSequence (ID,Position)
SELECT 36,1
UNION ALL SELECT 36,2
UNION ALL SELECT 36,3
UNION ALL SELECT 36,4
UNION ALL SELECT 36,5
UNION ALL SELECT 36,6
UNION ALL SELECT 44,1
UNION ALL SELECT 44,3
UNION ALL SELECT 44,4
UNION ALL SELECT 44,5
UNION ALL SELECT 44,6
私は何を見つけるしようとしています。この場合、IDによる位置のシーケンスのいずれかのブレークが44,1と44,3
の間に切れ目がある場合ですSELECT l.ID
,Start_Position = MIN(l.Position) + 1
,Stop_Position = MIN(fr.Position) - 1
FROM #MissingSequence l
LEFT JOIN #MissingSequence r
ON l.Position = r.Position - 1
LEFT JOIN #MissingSequence fr
ON l.Position < fr.Position
WHERE r.Position IS NULL
AND fr.Position IS NOT NULL
GROUP BY l.ID
をが、複数のID値がある場合、それは動作しません:
私が一緒に解析するために管理してきました。 1つのID、44しか存在しない場合は機能します。
思考、コメント、提案?
ありがとうございました!
あなたはどのような出力をしたいと思います。ここでは
はnullで左の参加のアイデアを使用して(ANSI準拠)バージョンは、一番上の行と下の行を選択し、それらの間に何もないのチェック、です見る?許容される位置の最大値はありますか? – tpdi
ポジションの最大数はありません...私が取り組んでいる全テーブルには、約12k IDレコード、ポジション3からx –
の@Christopherが含まれています。 –