SQL数据库中有一表TDATA,有字段AA,BB,CC,DD,EE,FF,GG,LH,LHSUM表中的记录有近1000万条,字段AA,BB,CC,DD,EE,FF,GG里面存储的是整型数字,从0-10000的数字,现在要做的是:
每行记录从AA,BB,CC,DD,EE,FF,GG这几个字段里面判断这几个字段里面的数字是否是连续的,比如AA=100,BB=101的话,那么BB、AA是属于连续的数字,现在希望通过SQL语句来判断这几个字段中是否存在连续的数字,会出现几次连续的数字:例如1:
字段:   AA    BB      CC     DD    EE      FF    GG 
值:    101   102    103    104   105      106   107 
那么,LH的值应该为7,表示最多有7个数字相连;LHSUM的值为1,表示出现了1段连续的数字。
例如2:
字段:   AA    BB      CC     DD    EE      FF    GG 
值:    101   102    103     211   212     213   214 
那么,LH的值应该为4,表示最多有4个数字相连;LHSUM的值为2,表示出现了2段连续的数字。
例如3:
字段:   AA    BB      CC     DD    EE      FF    GG 
值:    101   102    104     105   212     213   215 
那么,LH的值应该为2,表示最多有2个数字相连;LHSUM的值为3,表示出现了3段连续的数字。
备注:只要相邻的2个字段符合数字是递增1相连就表示为字段相连
如何通过SQL来实现?请高手指教!

解决方案 »

  1.   

    用ASP实现执行起来太慢了,而且超时肯定避免不了,如果能通过SQL来执行解决的话,几千万条记录也最多1个小时就可以搞定了。
      

  2.   

    要实现的话可以用游标加while循环来做  
    但是由于你是大型数据库 数据量很大 所以此方法不能用在你的例子中!
      

  3.   

    要不了1个小时。一步步来(暂时只想到这个笨方法):
    update TDATA set LH=7,LHSUM=1 where BB=AA+1 and CC=AA+2 and DD=AA+3 and EE=AA+4 and FF=AA+5 and GG=AA+6update ....还好只有7个字段,组合不算多。我再想想有没有简单的方法。同时期待高手们出手。
      

  4.   

    DECLARE CURSOR
    联机帮助!
      

  5.   

    以下是可能出现的连续递增1的组合结果LH=7:
    LHSUM=1:
    AA BB CC DD EE FF GGLH=6:
    LHSUM=1:
    AA BB CC DD EE FF
    BB CC DD EE FF GGLH=5:
    LHSUM=1或2:
    AA BB CC DD EE
    BB CC DD EE FF
    CC DD EE FF GGLH=4:
    LHSUM=1或2
    AA BB CC DD
    BB CC DD EE
    CC DD EE FF
    DD EE FF GGLH=3:
    LHSUM=1或2或3
    AA BB CC
    BB CC DD
    CC DD EE
    DD EE FF
    EE FF GGLH=2:
    LHSUM=1或2或3
    AA BB
    BB CC
    CC DD
    DD EE
    EE FF
    FF GG
      

  6.   

    是否可以通过2步来完成:
    第一步,先更新LH字段的值;
    第二步,再根据LH字段以及AA、BB、CC、DD、EE、FF、GG字段的值算出LHSUM的值?
      

  7.   

    后来只能从LH=7从高到低LH=2的顺序来更新了,花了半天时间总算更新完了,谢谢大家!