本人有一个表 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 这个只会查询到最大的一个.其实还有没有使用的就浪费了.
感谢赐教!
理想的应该是: 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)
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