Mysql断号查询(连续数字查询中间断开的地方)

项目里需要用到连续的序列号,这个序列号要按照从小到大的顺序依次往后生成。

比如1,2,3,4,5,6,7..24,25...这种连续格式,当前面的某一个数字被用掉以后,就重新生成。比如2,6被用掉了,那么现在的数字格式是这样的:1,3,4,5,7...24,25....当下回再生成数字的时候,就要优先生成2,然后再生成6,只有把中间断掉的数字补齐以后,才依次往后排列生成数字。

在处理数据库的时候,一开始想到用java的冒泡排序,每次通过中间值进行对比,来锁定最小的断号,但是在实际操作中并不可行。因此上网百度了一下,发现了一种方法,断号查询。


我这里只需要找到hgh(货柜号)为某一类型的最小序号,所以在查询的时候会根据条件做限制。从图上可以看出来,hgh为s类型的断号分别是s002和s006,我只需要取出来最小的s002,因此可以用limit0,1,并且使用正序排列。


sql写法如下:

<select  id = "XXX(方法名)"  parameterType = "hashmap" resultMap = "BaseResultMap">

             select (select max(num) + 1 from (select * from test where  hgh like '%s%' ) as b

             where  num < a.num) as beginNum, (num - 1) as endNum from(select * from test where hgh like '%s%' ) as a

             where  a.num> (select max(num)+1 from (select * from test where hgh like '%s%' ) as b where num < a.num ) order by num asc limit 0,1;

</select>


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值