现在有表TB,字段:ID,A,B,C,D,E...
其中ID是关键字段,不重复。
 现在想查找出表中A、B、C三个字段,只要有一个字段相等,就是一类,问这这表中有多少个类,如何快速的找出这些类,从每个类中,把这个类下的记录其它字段对比一下,选择其中某条记录的某个字段,做为新表对应字段的值,将数据保存到新表中。
 例:
      ID      A      B     C     D   E  F
     001     A1     B1    C1    1   2  3
     002     A1     B1    C2    23 34  5
     003     A1     B2    C1    1   2  3
     004     A1     B2    C2    1   2  3
     005     A2     B1    C1    1   2  3
     006     A2     B1    C2    1   2  3
     007     A2     B2    C1    1   2  3
     008     A2     B2    C2    1   2  3
     009     A3     B3    C3    1   2  3  那么查出来应该有两个类 001-008是一个类,009是一个类,那么我可以在001-008中任意从A B C D E F中选择值,放于新表中,不是从001-008中选择任意记录。 009就一条记录,直接保存。
  请问,这种表如何找出类似数据呢?(数据库中的数据是百万级的)
   我现在的想法就是一条一条对比,先读出一条记录,对比剩下的记录,找出和这条类似的,设标识,把这些记录一条一条读取,和数据库中其它数据对比。例如 表A,记录A1-A1000
先读取A1,对比A2-A1000,把A1和查找出和A1的A,B,C三个字段相同的数据,设标识,放到新表AA1,其中A1记录设标识,再一一取出AA1中除A1的其它记录,和A表中没有标识的其它数据对比,一直下去,直到AA1表中所有记录遍历一遍,从A表中查不出和AA1表中任意一条记录相似的,那么AA1就是一个类,A中剩下的从新开始查找。大家多出点想法。

解决方案 »

  1.   

    一下子找出全部的嘛?不用一个一个对比的.
    可以用row_number函数,使用over,来生成3个伪列。分别表示A,B,C在所有值的顺序。
    然后抽取这3个伪列都是1的数据就可以了。问题就是:使用分析函数的话,速度会是一个问题.
    假如你的数据里面,根本重复的就不多的话,更加会慢.
      

  2.   

     楼上的,你说的想不出来怎么写。你能不能以此表为例,写一下Sql。