跪求 分组相同且连续的记录,并取 Min Max 的 SQL 查询的方法
今天在公司做 IP 数据库转换功能,目的是将网上很容易找到的 IP 数据库整理出来,与公司的地区数据库相关联。网上流传得最多的就是 QQ 纯真版的 QQWry.dat 这个数据库。但是它数据库里面地区我们拿来没法用,如:四川省成都市某某某网吧、四川省某某医院、北京某某街某某号 等等,省、市、具体位置是连在一起的,无法找出规律把省、市分离出来(因为我要做的功能只用具到城市就可以了,类似 口碑、中华英才网 哪种自动取得访问者所在城市并进入城市的网站的功能)。
后面另外找到了一个 mdb 的数据库忘了哪儿下载的了,总之我把它导出成 文本格式 了,然后用 python 分析字符串,并跟自已的地区数据库做关联,最终再存入数据库。可没想到这玩意儿既然有23 万多条记录,妈呀,这怎么能拿来查找。而且我功能是首页,最起码要求查询速度要在100ms以内。而这 23 万多条,就算我全放内存里面也没法找得哪么快。
结构是这样:
1 2 3 4 5 6 7 8 |
|
start 与 end 字符串 IP 转成整形的值,1-2、3-4、5、6-7其实是可以分别组合起来的,只用留下最小的 start 与最大的 end就可以了。
正确的结果应是:
1 2 3 4 5 |
|
我开始时候试着用 Group by name 查询再 min(start) max(end) 但最终发现这样做法数据有错,它把 所有成都的记录都组合到了一起。
错误的结果:
1 2 3 4 |
|
我想了很久都没想出访怎么写 SQL,最后只好还是用 python 写循环,判断前一行与当前行,再做处理,最终还是弄出来了。不过很想知道有没有好的方法可以直接用 SQL 里面类似 group by 的方式弄出来。