当前位置: 代码迷 >> Sql Server >> SQL语句,求解。解决方法
  详细解决方案

SQL语句,求解。解决方法

热度:82   发布时间:2016-04-27 12:54:46.0
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-8rul = "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,888121,252,257,323,454,330,123,888,999,235,777,888131,262,267,333,464,340,123,888,999,235,777,888141,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
  相关解决方案