免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2211 | 回复: 13
打印 上一主题 下一主题

请教数据筛选问题!!!!急----高手请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-18 11:57 |只看该作者 |倒序浏览
1)情况如下
表结构:
编号       日期     时间         结果
00001        ---         01:00:00       F
00001        ---         02:00:00       F
00001        ---         03:00:00       F  
00001        ---         04:00:00       P
00002        ---         ----        P
00003        ---         ----        P
00004        ---         ----        P
00005        ---         ----        P
00006        ---         ----        P
00007        ---         ----        P
00008       ---         ----        P
00009        ---         ----        P
00010        ---         ----        P


2)要求
得出测量结果的良率
主意.  所有的编号都有可能重复,而且结果不一致,如0001产品,就测量了4次,但是根据时间判断,最后一次的结果是"P"所以认为也是合格的.但是只能算一个产品,因为良率是对产品而言的.

能否用最简单的SQL语句实现?

3)疑惑
如果用Group功能,但是不一定结果是"P",还有根据时间判断最后一次

4)目前方法:
遍历所有的编号,然后再对某个编号再排序,然后记录结果,最后计算良率

缺点:系统以及服务器开销太大.

请教高手指点!!!

论坛徽章:
0
2 [报告]
发表于 2006-05-18 12:47 |只看该作者
这种情况下想单独通过一个sql来实现似乎不行,至少我没想出来
一个改进的办法是新增一个统计表,每个产品只保留最后测试的那条记录,这样就方便多了

论坛徽章:
0
3 [报告]
发表于 2006-05-18 12:49 |只看该作者
恩,是个办法

论坛徽章:
0
4 [报告]
发表于 2006-05-18 12:56 |只看该作者
原帖由 yejr 于 2006-5-18 12:47 发表
这种情况下想单独通过一个sql来实现似乎不行,至少我没想出来
一个改进的办法是新增一个统计表,每个产品只保留最后测试的那条记录,这样就方便多了


那你的意思就是要修改记录数据的系统了,使其只保留最后的记录.
如果能做到的话,我何不直接记录有用的数据.

谢谢你的建议

我还在寻找好的方法......

论坛徽章:
0
5 [报告]
发表于 2006-05-18 13:02 |只看该作者
4)目前方法:
遍历所有的编号,然后再对某个编号再排序,然后记录结果,最后计算良率

缺点:系统以及服务器开销太大.


这种方法需要2个大循环才能实现,已经开销很大了,
事实上,我在外面还有一个循环,因为我没法得到编号,只能从另外的地方得到.

我们算一下;

如果有100个小包裹,每个小包裹里有100个编号的产品.每个产品最少测量1次,有的要2-4次
这样的循环就是100*100*(1-4)
如果我每天有50000个小包裹,那就不可想象了.

论坛徽章:
0
6 [报告]
发表于 2006-05-19 12:02 |只看该作者
说实话,我没看懂你的意思。
那么象版主说的,只要能提取每个编号最后一次的测量记录是不是就行了?
计算良品率应该是你程序做吧?还是用 SQL 做?

论坛徽章:
0
7 [报告]
发表于 2006-05-19 13:14 |只看该作者
原帖由 rardge 于 2006-5-19 12:02 发表
说实话,我没看懂你的意思。
那么象版主说的,只要能提取每个编号最后一次的测量记录是不是就行了?
计算良品率应该是你程序做吧?还是用 SQL 做?


你的建议是不错.

现在问题是数据的量很巨大,提取每个编号的最后一次测量记录是不是也是用SQL语句做呢?
如果我有100万个编号,每个编号最少测量一次,我们假定最多测量3次,
这样的系统开销光得出每个编号最后的记录就要用100万*2(平均次数)=200万
这样还只是得出最后的测量记录.我们还要根据其它信息做分类汇总,这也要SQL做吧?

良率是用程序做,但是得出计算良率的数据是要嵌套的SQL得出的.

论坛徽章:
0
8 [报告]
发表于 2006-05-19 13:40 |只看该作者
呵呵,数据量大的问题就没办法了,你实际测试过没,耗时多少?实在太慢就要修改结构了。
你的 SQL 语句怎么样的?
一次性取出最新的记录不需要你说的遍历然后再排序什么的,直接两个 order by 加 group by 即可。
.... order by 日期 desc, 时间 desc group by 编号

论坛徽章:
0
9 [报告]
发表于 2006-05-23 10:44 |只看该作者
原帖由 rardge 于 2006-5-19 13:40 发表
呵呵,数据量大的问题就没办法了,你实际测试过没,耗时多少?实在太慢就要修改结构了。
你的 SQL 语句怎么样的?
一次性取出最新的记录不需要你说的遍历然后再排序什么的,直接两个 order by 加 group by 即可 ...


1)修改表结构有什么好的建议?
2)你说的order by 加 group by,  我不知道哪个数据库支持,我用的是 Mysql 4.0.X

论坛徽章:
0
10 [报告]
发表于 2006-05-23 11:31 |只看该作者
group by 一直都支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP