表TB1
FIELD1  FIELD2
SK0001 2.14800
SK0002 2.41400
SK0003 2.42700
SK0004 2.76900
SK0005 2.42200
SK0006 2.63300
SK0007 2.64700
SK0008 2.44600
SK0009 2.61600
SK0010 2.51300
SK0011 2.76400
SK0012 2.82900
SK0013 2.32400
SK0014 2.46200
SK0015 2.61800
SK0016 2.61300
SK0017 2.77300
SK0018 2.65400
SK0019 2.47000
SK0020 2.48600
SK0021 2.43400
SK0022 2.63400
SK0023 2.75800
SK0024 2.71500
SK0025 2.64600
SK0026 2.72900
SK0027 2.59800
SK0028 2.78300
SK0029 2.42000
SK0030 2.64000
SK0031 2.57900
SK0032 2.80900
SK0033 2.74400
SK0034 2.75500
SK0035 2.72000
SK0036 2.78200
SK0037 2.73500
SK0038 2.66700
...............
...............比如有上面这些数据,字段FIELD1为唯一编号,字段FIELD2为带有小数点的值。要求按照每组数据的FIELD2字段之和等于24.5到25.5的之间的标准,把上面所有数据分成几组查询出来,并显示。如果分组后确实有剩余的部分数据不能满足24.5到25.5的之间的标准,可以单独显示出来,再微调下。用存储过程都可以,只要能把结果查询出来。我的基本思路:
SELECT SUM(FIELD2)/25 FROM TB1 大概知道有这么多组结果。 后面请高人指点。

解决方案 »

  1.   

    如果用存储过程,一切SQL难题都不是问题了,造张临时表,游标循环,一行一行往里扔,返回一个临时表的游标,完事.
      

  2.   

    当然这个算法数据量一大,服务器可能直接死掉,但总比没有好,数据量大可以分段处理而且我认为,一旦被逼到了造临时表的地步,别谈什么性能了,用SQL弄出来当然最好,但有些问题的SQL够拼一年的,解决问题没有那么充裕的时间。 
      

  3.   


    去数学论坛请教一下吧,SQL优化没太大可能,随便假设一下,如果值是1-12,上面的算法根本不可能完成了。主要是一个中位值的问题,基本思想是取方差,看看是什么数量级的,然后决定循环几层,只要是递归嵌套,没可能速度非常快的,除非数据非常规则,都是依次差0.11,0.12...这样的。