02 06 14 17 22 31 -02
04 09 13 25 27 32 -06
………
03 07 13 22 28 29 -13
04 09 13 25 27 32 -06
你一说,我就会有灵感。呵呵!
就你的具体情况来看,第2条记录与倒数第1条记录是重复的;假如添加新的记录09 04 25 13 27 32 -06也应该是第2条记录的重复记录。这样的话,判断比较麻烦。
假如记录的顺序一样、值也一样,算重复记录的话,可以写成SELECT-SQL形式,也可以写成先进行唯一索引后复制的形式
假如考虑记录的值,而不管排列顺序,就像集合相等的概念那样,这样去掉重复记录稍微麻烦一点.先生成一个安排好顺序的关键字段,再进行唯一索引,最后进行复制。
以下是我做的一个,直接在原库里查找重复数据,结果我试了一下,如果库里有10000条以上记录的话,排除一次要半个小时以上,呵呵,差点晕倒。
SET DELETED ON
USE ssqjxsj_dat.dbf
Dimension gaArrayOne(6)
GO TOP
xx=0
jsq=1
c6HH1=''
c6HH2=''
DO while .NOT.EOF()
SCATTER TO gaArrayOne
For i=1 To 6
c6HH1=c6HH1+ALLTRIM(STR(gaArrayOne(i)))
ENDFOR
SKIP
c6HH2=''
DO while .NOT.EOF()
If c6HH1=c6HH2
DELETE
xx=xx+1 &&记录已删除的数量。
SKIP
SCATTER TO gaArrayOne
For i=1 To 6
c6HH2=c6HH2+ALLTRIM(STR(gaArrayOne(i)))
ENDFOR
ELSE
SKIP
SCATTER TO gaArrayOne
For i=1 To 6
c6HH2=c6HH2+ALLTRIM(STR(gaArrayOne(i)))
ENDFOR
ENDIF
ENDDO
? xx
jsq=jsq+1
GO jsq
ENDDO
我有一个不成熟的想法:
增加一个字段(即第八个字段),把前七个字段的值以降序排列并连成一个字符串,然后存入第八个字段中,最后用SELECT-SQL语句以DISTINCT参数选择不重复数据。
不知可否?!
[此贴子已经被作者于2006-9-28 22:14:13编辑过]
晕啊。我试了,速度是非常快的,几乎在1秒内完成,但是原库是我隨机产生了20000条记录,但过滤后只产生了50条记录,其他记录没有了。我把原库索引了后进去看了一下,没有那第多重复的记录。至少过滤后应有10000条以上记录才对啊。
那你得好好地检查了。是程序错了呢,还是数据本身的问题。
注意,我给你的程序是当所有字段的值为字符型的时候用字符运算符号+连接产生的,若这里被处理的数据是数值型则需要修改程序了:STR(字段1,2)+STR(字段2,2)+STR(字段3,2)+...+STR(字段6,2)
再试试看?