日期:2014-05-18  浏览次数:20687 次

SQL语句,求解。
表A。
------------------------------------------
num
111,222,247,313,444,320,123,888,999,235,777,888...
121,252,257,323,454,330,123,888,999,235,777,888...
131,262,267,333,464,340,123,888,999,235,777,888...
141,272,277,343,474,350,123,888,999,235,777,888...

.....
N行(约有10万行)

每一条记录用逗号分开,一共64个字数组合。

现在给出了一个常量:“125,241,250,320,440,330,120,880,990,230,770,883.....”

查找出记录中。每个逗号分开过后的数字相差的值不超过15并且相差的个数大于4个的记录。
比如:

“125,241,250,320,440,330,120,880,990,230,770,883.....”

第一位是(125-15 ~ 125+15)115-140之间的就满足条件。
第二位是(241-15 ~ 241+15)。。。。。

只要这样的条件满足4个或以上的就显示出来。

这个用存储过程可能可以实现。但是速度怎么提升??

请大家帮帮忙。或许可以改进一下结构或算法。

高手帮帮啊。。。。




------解决方案--------------------
Python code
#!/usr/bin/python
# encoding: utf-8

rul = "125,241,250,320,440,330,120,880,990,230,770,883"

def ln2ls(ln):
    return map(int, ln.strip().split(','))

rul = ln2ls(rul)

lns = '''111,222,247,313,444,320,123,888,999,235,777,888
121,252,257,323,454,330,123,888,999,235,777,888
131,262,267,333,464,340,123,888,999,235,777,888
141,272,277,343,474,350,123,888,999,235,777,888'''

rs = []
for ln in lns.splitlines():
    ls = ln2ls(ln)
    rs.append([i for i, r in zip(ls, rul) if -15 <= i-r <= 15][:4])

for r in rs:
    print r

#~ >python -u "test.py"
#~ [111, 247, 313, 444]
#~ [121, 252, 257, 323]
#~ [131, 333, 340, 123]
#~ [123, 888, 999, 235]
#~ >Exit code: 0    Time: 0.075