我有一个 ID 和职位表
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 值,它就不起作用。如果只有一个 ID,44 存在,它确实有效。
想法、意见、建议?
谢谢!