昨天在网上看到一个题目,看上去比较简单,可是后面感觉有点麻烦。
1,2
3,4
5,5
7,9
10,11
19,20需要写一程序,将连续的数放到表中,如:1,2
3,4
5,5
取最大值最小值放入表中,1,5
再往下面走,依次进行取连续的数的最大值及最小值作为一个记录插入表中
1,2
3,4
5,5
7,9
10,11
19,20需要写一程序,将连续的数放到表中,如:1,2
3,4
5,5
取最大值最小值放入表中,1,5
再往下面走,依次进行取连续的数的最大值及最小值作为一个记录插入表中
本帖最后由 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) 作为一条记录插入一张实体表或是临时表中。依次进行,直至这张表结束。
+-----------+-----------+-------+
| 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>