求一条Sql语句.查询出最小不存在的数字!进来看详情。谢谢!

MySql 码拜 9年前 (2016-02-03) 1104次浏览
本人有一个表 test 其中有个字段是 number 全部是数字.从1开始 不是自动增长的字段.
理想的应该是: 1 2 3 4 5 6 7 8 9 10
但是现实是 1 2 3 4  6 7 8  10
发现5和9这个数字还没被使用.
本人想用一条sql语句查询出来 最小的没有被使用的数字
查询出来应该是 5  然后5被使用后就是9 然后就是11这样
查询最小的 min()  但是他没有被使用该怎么样查询呢.谢谢!
select max() from test 这个只会查询到最大的一个.其实还有没有使用的就浪费了.
感谢赐教!
解决方案

20

select min(id+1)
from test a
where not exists (select 1 from test where id=a.id+1)

10

mysql> select * from test;
+--+--+
| id | name |
+--+--+
|  1 | 1    |
|  2 | 2    |
|  3 | 3    |
|  5 | 5    |
|  6 | 6    |
|  7 | 7    |
|  9 | 9    |
+--+--+
7 rows in set
mysql> SELECT Min(id + 1)
FROM   test a
WHERE  NOT EXISTS (SELECT 1
                   FROM   test
                   WHERE  id = a.id + 1);
+--+
| Min(id + 1) |
+--+
|           4 |
+--+
1 row in set

10

declare @t as table(id int)
;with t as 
(select 1 as id 
union all 
select t.id+1  from t where t.id <10
)
insert @t select id from t
delete @t where id in(5,9)
select top 1 rid from
(select rid=ROW_NUMBER()over(order by id)+MIN(id)over()-1,id from @t)t
where id-rid>0

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求一条Sql语句.查询出最小不存在的数字!进来看详情。谢谢!
喜欢 (0)
[1034331897@qq.com]
分享 (0)