昨天在网上看到一个题目,看上去比较简单,可是后面感觉有点麻烦。
 
1,2
3,4
5,5
7,9
10,11
19,20需要写一程序,将连续的数放到表中,如:1,2
3,4
5,5  
取最大值最小值放入表中,1,5
再往下面走,依次进行取连续的数的最大值及最小值作为一个记录插入表中

解决方案 »

  1.   

    原题目是这样:
    本帖最后由 ls3648098 于 2012-6-29 09:48 编辑
      IPADD1     IPADD1    SHENG
    993100052        993100052        海南               
    993100053        993100053        海南              
    993100054        993100054        海南            
    993100055        993100057        海南           
    993100058        993100058        海南         
    993100059        993100065        海南         
    993100067        993100067        海南            
    993100068        993100074        海南         
    993100075        993100075        海南           
    993100076        993100076        海南         
    993100078        993100085        海南   
    993100086        993100086        海南
    993100087        993100089        海南               
    993100090        993100090        海南        
    993100091        993100092        海南        
    993100093        993100093        海南               
    993100094        993100111        海南               
    993100112        993100112        海南               
    993100113        993100257        海南               
    993100258        993100258        海南        
    现在一记录全国IP的表,若上一记录  IPADD2与下一行  IPADD1 记录连续,则继续往下执行,直到 上一行 IPADD2+1<>下一行IPADD1 则取这段连续的区间 min(  IPADD1)、max(  IPADD2) 将min(  IPADD1)、max(  IPADD2) 作为一条记录插入一张实体表或是临时表中。依次进行,直至这张表结束。
      

  2.   

    要写成程序?不大了解,就是写 sql 吧,要插入表什么的,就再加上 insert into table xxx 就可以了:mysql> select * from iptest;
    +-----------+-----------+-------+
    | ipadd1    | ipadd2    | sheng |
    +-----------+-----------+-------+
    | 993100052 | 993100052 | 海南  |
    | 993100053 | 993100053 | 海南  |
    | 993100054 | 993100054 | 海南  |
    | 993100055 | 993100057 | 海南  |
    | 993100058 | 993100058 | 海南  |
    | 993100059 | 993100065 | 海南  |
    | 993100067 | 993100067 | 海南  |
    | 993100068 | 993100074 | 海南  |
    | 993100075 | 993100075 | 海南  |
    | 993100076 | 993100076 | 海南  |
    | 993100078 | 993100085 | 海南  |
    | 993100086 | 993100086 | 海南  |
    | 993100087 | 993100089 | 海南  |
    | 993100090 | 993100090 | 海南  |
    | 993100091 | 993100092 | 海南  |
    | 993100093 | 993100093 | 海南  |
    | 993100094 | 993100111 | 海南  |
    | 993100112 | 993100112 | 海南  |
    | 993100113 | 993100257 | 海南  |
    | 993100258 | 993100258 | 海南  |
    +-----------+-----------+-------+
    20 rows in set (0.00 sec)mysql> set @last_ip1 := 0;
    Query OK, 0 rows affected (0.00 sec)mysql> set @last_ip2 := 0;
    Query OK, 0 rows affected (0.00 sec)mysql> set @section := 1;
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> select min(ipadd1) as ipadd1, max(ipadd2) as ipadd2, sheng
        -> from
        -> (
        ->     select if((@last_ip2 +1 = ipadd1) or @last_ip2 = 0, @section, @sectio
    n := @section + 1) as section, @last_ip1 := ipadd1 as ipadd1, @last_ip2 := ipadd
    2 as ipadd2, sheng
        ->     from iptest
        -> ) as tmp
        -> group by section;
    +-----------+-----------+-------+
    | ipadd1    | ipadd2    | sheng |
    +-----------+-----------+-------+
    | 993100052 | 993100065 | 海南  |
    | 993100067 | 993100076 | 海南  |
    | 993100078 | 993100258 | 海南  |
    +-----------+-----------+-------+
    3 rows in set (0.00 sec)mysql>