有一个号码资源的管理需求,具体如下:
字段 number(8位)  state(占用 、空闲)
号码数据集:180万   ,全部是连续号码,例如(44210000~46009999)1.  求该号码集千号段首号码
    描述:连续1000个state全为“空闲”的号码集,输出首号码(如44250000~44250999  state全部为空闲,输出44250000)2.  求该号码集百号段首号码
    描述:在非千号段里筛选,连续100个state全为“空闲”的号码集,输出首号码(如44250000~44250099  state全部为空闲,输出44250000)3.求该号码集整十号段首号码
    描述:在非百号段里筛选,连续10个state全为“空闲”的号码集,输出首号码(如44250000~44250009  state全部为空闲,输出44250000)求各位大神帮忙看下有什么比较好解决的方案,本人按照逻辑写了,性能很差

解决方案 »

  1.   

    以千号段为例方案一:
    建议state:0空闲、1占用,状态值加和为0筛选空闲段。
    SELECT number,SUM(state) FROM table
    GROUP BY SUBSTR(number,1,5)
    HAVING SUM(state)=0方案二:
    先筛选所有空闲,然后分组count数量为1000的段。
    SELECT number,count(number) FROM table
    WHERE state='空闲'
    GROUP BY SUBSTR(number,1,5)
    HAVING count(number)=1000百号段就GROUP BY SUBSTR(number,1,6)
      

  2.   

    《如何协助 MySQL 实现 Oracle 高级分析函数 》这篇文章里有如何实现MySQL嵌套函数的办法,性能还比较高
      

  3.   

    MySQL的嵌套函数实现起来是比较困难的,尤其是数据量大的时候,可以参考这篇文章的介绍:
    《如何协助 MySQL 实现 Oracle 高级分析函数》