连续的号断号补号 Mysql

要求连续的号中间是不能断号,而且是纯数字的

-- 这个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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值