标题:数据表抽检
只看楼主
liujc1973
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-10-8
结帖率:100%
已结贴  问题点数:20 回复次数:9 
数据表抽检
一个表有上万条记录,有一个字段为年份,值有2014,2013,2012.我想从这个字段中每一年都按10%随机抽取记录生成一个新的表,该如何写程序?谢谢!
搜索更多相关主题的帖子: 记录 2014 数据表 如何 
2014-10-08 15:28
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:2 
加一列,用来写入随机数,然后按年份、按随机数进行排序,每一年份的前10%学生就是你所想要的数据了

只求每天有一丁点儿的进步就可以了
2014-10-08 15:46
liujc1973
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-10-8
得分:0 
请问随机数怎么给啊?
2014-10-08 15:53
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:6 
程序代码:
CLEAR ALL
CLOSE ALL

* 建立空结果表 curResult
SELECT 0 AS id,* FROMWHERE .f. INTO CURSOR curResult READWRITE

* 添加随机数列形成新表 t1
SELECT RAND() as id,* FROMINTO CURSOR t1

* 统计各年份的记录数形成新表 t2
SELECT 年份,CNT(*) as 记录数 FROMGROUP BY 年份 INTO CURSOR t2

* 按各年份记录数的10%,筛选记录到结果表 curResult
SELECT t2
SCAN
    INSERT INTO curResult ;
        SELECT TOP IIF(t2.记录数*0.1<1,1,t2.记录数*0.1) * ;
        FROM t1 ;
        WHERE 年份 = t2.年份 ;
        ORDER BY 年份,id
ENDSCAN

* 显示查询结果
SELECT curResult
ALTER TABLE curResult drop COLUMN id
GO TOP
BROWSE


泉城飞狐
2014-10-08 17:00
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:2 
补充说明:你把随机数那个字段的小数位设得多一点,这样可以最大程度地区分每一条记录。
2014-10-08 22:24
liujc1973
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-10-8
得分:0 
SELECT t2
SCAN
    INSERT INTO curResult ;
        SELECT TOP IIF(t2.记录数*0.1<1,1,t2.记录数*0.1) * ;
        FROM t1 ;
        WHERE 年份 = t2.年份 ;
        ORDER BY 年份,id
ENDSCAN

提示有不识别的短语或关键词
2014-10-09 10:28
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:2 
回复 6 楼 liujc1973
我的代码在 VFP 9.0 下调试通过。

泉城飞狐
2014-10-09 13:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:2 
编程的关键是思路,思路是否合理,决定了程序的优劣。

坚守VFP最后的阵地
2014-10-10 13:53
liujc1973
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-10-8
得分:0 
谢谢大家,解决了!
2014-10-11 12:42
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
得分:6 
SELECT INT(RAND()*10000) id,* FROM 表 INTO CURSOR t1 READWRITE ORDER BY 年份,id
REPLACE ALL id WITH RECNO() IN t1
SELECT 年份,MIN(id) id,CEILING(0.1*COUNT(*)) 记录数  FROM t1 INTO CURSOR t2 GROUP BY 年份
SELECT a.* FROM t1 a,t2 b INTO CURSOR t4 WHERE a.年份=b.年份 AND a.id-b.id+1<=b.记录数
*表t4为结果



[ 本帖最后由 kiff 于 2014-10-13 15:36 编辑 ]
2014-10-13 11:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436970-1-1.html




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

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