要求连续的号中间是不能断号,而且是纯数字的
-- 这个sql能查询出当前有效的号前面一个号是多少例子:1到100号 中80号因为某种原因取消了,
-- 那需要把号码补上,以下sql能把80号查询出来,但是这个sql有2个问题,第一个就是当数据量稍微大一点,
-- 效率会很慢,第二这个号补号是从后往前的就是80-90号都取消了,那会从90号往前补。
select num-1 as num from table b
where b.num > (select max(num)+1 from table b1
where b1.num < b.num and type in ('1','0'))
LIMIT 0 ,1
-- 新增一个变量,让这个变量有个初始值,这个值在和数据库中的数字进行对比,把对不上的数据标记起来,
-- 在筛出来,再取第一条数据,那这样就是最小的断号且查询数据也还可以。
set @maxNo:= 160000;
select rank_num from (
select num ,@maxNo:= @maxNo+1 as rank_num ,
@maxNo,case when num !=@maxNo then '1' end as maxNoCode
from (select num from table WHERE type in ('0','1') GROUP BY num order by num )a
) a where maxNoCode ='1' LIMIT 0 ,1