昨天在网上看到一个题目,看上去比较简单,可是后面感觉有点麻烦。
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
再往下面走,依次进行取连续的数的最大值及最小值作为一个记录插入表中
解决方案 »
- 求助一MySql问题。 拼接sql语句是如果是中文自动添加“,” 求解!
- PostgreSQL 中 %TYPE是什么意思,怎么使用?
- 关于数据库存储图片的问题
- 请教下面两个sql的差别
- mysql 备份的脚本怎么查询? 在线等~~~~~~~·
- LINUX下能够用脚本实现不登陆mysql数据库来进行查询操作吗?
- MySQL 4 查询大小写问题
- 不能提示连接mysql,大家帮帮忙啊。
- java连接mysql,oracle,sqlserver的类(源代码):
- 各位大神,为什么我的xmpp mysql 启动会出现mysqld.exe 已停止运行 跪求解决。
- 高手给看看这是什么原因啊
- MYSQL查询问题急求
本帖最后由 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>