跪求 分组相同且连续的记录 ,并取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的方式弄出来。