如果我得到如下表。现在基于此我们知道仅缺少1个ID,即4。有没有办法找到这个没有 使用Lead,Lag,CTE,并且仅使用单选和Joins
ID Name
1 Tom
2 Betty
3 Ram
5 John
6 Doe
答案 0 :(得分:2)
您可以使用自我联接并检查“先前”值是否丢失:
allowMainThreadQueries()
输出:
SELECT t1.ID - 1 AS Missing_ID
FROM table1 t1
LEFT JOIN table1 t2 ON t2.ID = t1.ID - 1
WHERE t2.ID IS NULL AND t1.ID > 1
答案 1 :(得分:1)
如果您只想检测一个缺失的缺口,请考虑以下查询:
Missing_ID
4
这里的逻辑是针对每条记录检查是否存在SELECT ID - 1 AS missing
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2 WHERE t2.ID = t1.ID - 1) AND ID > 1;
值,该值比正在扫描的当前行小{em> not 。在这种情况下,我们返回当前的ID
值减去一。
但是,也许更好的方法是将包含完整序列的表左连接到当前表,然后断言缺少的值:
ID
答案 2 :(得分:1)
使用ROW_NUMBER()
函数尝试此操作:
SELECT tempid
FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS tempid
FROM #temp
) a
LEFT JOIN #temp
ON a.tempid = #temp.id
WHERE #temp.id IS NULL;
tempid
4