我想在SQL表的计数器列中找到第一个“间隙”。例如,如果有值1,2,4和5,我想找出3。我当然可以按顺序获取值并手动进行处理,但是我想知道是否可以在SQL中进行处理。另外,它应该是非常标准的SQL,可以与不同的DBMS一起使用。
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
如果您的第一个值id = 1,则所有答案都可以正常工作,否则将不会检测到该差距。例如,如果您的表ID值为3、4、5,则查询将返回6。
我做了这样的事情
SELECT MIN(ID+1) FROM (
SELECT 0 AS ID UNION ALL
SELECT
MIN(ID + 1)
FROM
TableX) AS T1
WHERE
ID+1 NOT IN (SELECT ID FROM TableX)
慕码人8056858
TA贡献1803条经验 获得超6个赞
我想到的第一件事。不确定完全采用这种方式是否是个好主意,但应该可以。假设表为t,列为c:
SELECT t1.c+1 AS gap FROM t as t1 LEFT OUTER JOIN t as t2 ON (t1.c+1=t2.c) WHERE t2.c IS NULL ORDER BY gap ASC LIMIT 1
编辑:这可能是一个更快的滴答声(并且更短!):
SELECT min(t1.c)+1 AS gap FROM t as t1 LEFT OUTER JOIN t as t2 ON (t1.c+1=t2.c) WHERE t2.c IS NULL
添加回答
举报
0/150
提交
取消