| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1024 人关注过本帖
标题:请教,怎么统计间隔的记录数
只看楼主 加入收藏
atsnow
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-8-13
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:15 
请教,怎么统计间隔的记录数
请教一下,如下表,有上千条记录,标记不等于T的若干,现在要统计的是T与T之间相隔最长数,比如目前表中序号5到11是最长,是6,怎么用程序在上千条记录中统计出表中最长T与T之间相隔是几?

序号  项目  标记
1     123    T
2     325    T
3     658
4      .
5      .     T
6      .
7      .
8      .
9      .     
10     .
11     .     T
12     .     T
13     .
14     .     T
15     .     T

[ 本帖最后由 atsnow 于 2011-9-9 09:45 编辑 ]
搜索更多相关主题的帖子: 统计 
2011-09-09 09:42
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:4 
增加一个序号字段,然后用set filte to语句将标记为T的筛选出来,再将相邻两条记录的序号相减,应该可以得到结果。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-09-09 10:52
atsnow
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-8-13
收藏
得分:0 
如果不改变库结构,请写出原码,谢谢!
2011-09-09 10:58
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
抱歉!我通常写不出来原码。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-09-09 10:59
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
我一般只有渔,没有鱼!

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-09-09 11:00
atsnow
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-8-13
收藏
得分:0 
哈哈,和我一样啊,我也知道这怎么做,索引汇总,然后序号相减也可以,可我也写不出原码!晕!
2011-09-09 11:01
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:4 
表1增加字段 A2 N(6), A3 N(6)

USE 表1
T3=0
SCAN
IF 标记 =.T.
T3=T3+1
REPLACE A3 WITH T3
ELSE
REPLACE A3 WITH T3
ENDIF
ENDSCAN
REPLACE a2 WITH 0 FOR A1=.T.
REPLACE a2 WITH 1 FOR A1=!.T.
INDEX ON A3 TAG A3
TOTAL ON A3 TO 表2 FIELDS A2
SELECT 0
USE 表2
REPLACE A2 WITH A2+1 FOR A2<>0
CALCULATE MAX(A2) TO T2
LOCA FOR A2=T2
T1=序号

BROWSE
自序号T1起,有最大间隔T2.
2011-09-09 11:07
atsnow
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-8-13
收藏
得分:0 
谢谢,我研究一下!没想到会这么复杂!

[ 本帖最后由 atsnow 于 2011-9-9 11:22 编辑 ]
2011-09-09 11:13
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:4 

你可以用 scan/endscan + if/endif 的方法(有点儿类似7楼, 但不需新增字段的)~

也可以用sql的方法, 这只需3句简单的代码就行了, 自己先想想怎么做吧~ 结果见附图:

图片附件: 游客没有浏览图片的权限,请 登录注册




[ 本帖最后由 茵梦湖 于 2011-9-9 11:41 编辑 ]
2011-09-09 11:37
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 

假设 你的序号字段是数值型, 那么 scan/endscan 方法的代码如下:


use 你的表名
lsmax=0
scan
   loca rest for empt(标记)
   ls序号 =序号
   loca rest for !empt(标记)
   lsmax =max(lsmax,序号-ls序号+1)
endscan
messageb(" 最大间隔为: "+tran(lsmax),"")
retu

2011-09-09 12:03
快速回复:请教,怎么统计间隔的记录数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042718 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved