SQL语句,求解。解决方法
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个或以上的就显示出来。
这个用存储过程可能可以实现。但是速度怎么提升??
请大家帮帮忙。或许可以改进一下结构或算法。
高手帮帮啊。。。。
------解决方案--------------------
表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