在一张表中,其中有一个字段的记录值是递增的(但不规则缺少几个值),要找出缺少的那几个记录值,请问有没有比较好的算法。(记录有几千条)
解决方案 »
- 为什么输入重复的用户名也不提示重复啊
- ProgressBar与其他窗体控件的变量传递
- vb6中sql语句的问题
- diclover来
- 求一批量更新的sql语句
- 怎样用VB获取硬盘ID?
- 如何获取sql server数据库中某个表的属性,并可对其各项属性进行修改???
- 请问怎样才可以将一个大的RecordSet对象变小(ADO)?
- vb6.0中datareport能直接导出excel文件吗?
- 各位高手,编译下面这段程序时,说有3077号错误syntax error(missing operator) in expression,请各位指教!!
- 调试控件程序时候,经常在注册表里注册了一切无用控件,如何有效删除???
- 怎么会出问题?????VB网络编程大虾请进!!!!
缺少7 9 10 11 12
6+8=14 %2 =0 14/2=7 =>7
8+13=21 %2=1 but 21/2=11.5>8 8+1~8+(13-1) =>9 10 11 12
14+18=32%2=0 如上
再建一个临时表,只有一个数值字段,往里添加数据,从1到几千
然后
select id from t2 where id not in (select id from t1);再想想有没有一下子就解决的办法。。
====================================
添数只需要最多两个sql语句就可以完成了(建临时表占一个sql语句)。。但我没有监视软件,所以也说不定是那种快但我想,用for来循环已经是走头无路才用的办法。但即使是用添临时表的方法,也过不了我自己这关。我想要(我想也是楼主要的)的是用一个sql解决它。
我也曾考虑过一句sql语句,不过有致命伤,就是如果缺的数是连续三个以上就会出现漏报的情况例如:
1 2 3 4 5 6 8 13 14 15 18
缺少7 9 10 11 12 16 17
用我的语句可以得到7 9 12 16 17,但10、11会遗漏了所以这种方法会适合于存储过程,而不符合我想要的结果(用一个sql解决它)。但我想,在楼主所说的情况下:
在一张表中,其中有一个字段的记录值是递增的(但不规则缺少几个值),要找出缺少的那几个记录值,请问有没有比较好的算法。(记录有几千条)
用这种方法的存储过程,还是会比用for来循环高效很多的。。当然,这也是我的“想当然”,因为也是没有测试过。
再想想有没有一下子就解决的办法。
也希望数据库版的牛人帮帮忙。
dim lack as long
先读取第N=group个记录,
tmp=第group个记录.field("").value - N
if lack<tmp then
for i=1 to group
检查记录是否连续
next i
lack =tmp
end if
再读取第N=group+group个记录,重复以上操作。
//睡觉了,具体代码就不写了。
不过还没有想到方法。顶贴。
http://community.csdn.net/Expert/topic/3857/3857175.xml?temp=.3265192
谢谢!
1 首先用一个查询按递增字段排序提取所有记录。
2 MoveLast, 读取递增字段值,与 RecordCount 比较,得到缺少的记录数。
3 用 Move 方法移动到中间,同样用字段值与 AbsolutePosition 比较,得到它之前缺失的记录。
4 如果它的上部没有缺失,折半查找它的下部;如果下部没有缺失,折半查找它的上部;否则两边都折半查找。5 如上递归,直至将折半的单位缩小到2条记录,就可以确定缺失的编号了。