楼主: weddingmax

大家来列举一下查找同一内表中重复记录的最优化的算法

[复制链接]
论坛徽章:
0
11#
发表于 2008-9-9 16:18 | 只看该作者
關注

使用道具 举报

回复
论坛徽章:
65
娜美
日期:2019-11-05 22:10:22日产
日期:2013-10-25 16:03:35比亚迪
日期:2013-10-10 21:14:31蛋疼蛋
日期:2013-07-11 12:50:51蜘蛛蛋
日期:2013-06-15 14:48:28复活蛋
日期:2013-05-09 22:48:44奥运会纪念徽章:射击
日期:2012-08-22 18:54:11灰彻蛋
日期:2011-12-08 22:41:29灰彻蛋
日期:2011-11-26 23:41:15蛋疼蛋
日期:2011-11-19 18:41:26
12#
发表于 2008-9-9 19:19 | 只看该作者
关注

使用道具 举报

回复
论坛徽章:
83
生肖徽章2007版:羊
日期:2009-03-18 14:00:34生肖徽章2007版:羊
日期:2009-02-28 10:00:44生肖徽章2007版:羊
日期:2009-03-20 14:47:19生肖徽章2007版:羊
日期:2009-03-22 11:39:08生肖徽章2007版:羊
日期:2009-03-23 14:01:04生肖徽章2007版:羊
日期:2009-06-12 12:46:14生肖徽章:羊
日期:2007-09-26 17:02:21生肖徽章:羊
日期:2007-09-26 17:02:14生肖徽章:羊
日期:2007-09-26 17:02:07生肖徽章:羊
日期:2007-09-26 12:34:37
13#
发表于 2008-9-10 10:06 | 只看该作者
loop是少不了的!at new material+plant?

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
14#
发表于 2008-9-11 16:54 | 只看该作者
原帖由 weddingmax 于 2008-7-4 11:28 发表
目前想到比较好的办法是:
data cnt_flg type i.

sort it_material by material plant.
loop it_material into he_material.
  clear fnt_flg.
  at new plant.
     cnt_flg = cnt_flg + 1.
  endat.

  at end of plant.
     cnt_flg = cnt _flg + 1.
  endat.
endloop.

如果标志cnt_flg的结果不是1,那么它就是重复的纪录。如果标志为2。那么就没有和它重复的纪录。

不知道,大家有没有效率更高的方法,希望大家提出更多方案。
谢谢!


一个sort,一个loop,不错了,你还想怎样

使用道具 举报

回复
论坛徽章:
0
15#
发表于 2008-9-19 16:42 | 只看该作者

不一定哪个算法就好,要看重复率.

不一定哪个算法就好,要看重复率.

使用道具 举报

回复
论坛徽章:
9
奥运会纪念徽章:体操
日期:2008-10-24 13:08:312009新春纪念徽章
日期:2009-01-04 14:52:28CTO参与奖
日期:2009-02-09 09:47:57祖国60周年纪念徽章
日期:2009-10-09 08:28:00参与WIN7挑战赛纪念
日期:2009-11-06 16:05:252010新春纪念徽章
日期:2010-03-01 11:19:502010广州亚运会纪念徽章:壁球
日期:2010-11-22 15:34:18秀才
日期:2015-08-28 09:13:22金牛座
日期:2015-08-28 09:13:22
16#
发表于 2008-10-26 11:59 | 只看该作者
clear  应该放在 AT NEW里面吧?

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442008新春纪念徽章
日期:2008-02-13 12:43:03
17#
发表于 2008-10-27 17:29 | 只看该作者
oracle的话,使用rowid 是一个办法

使用道具 举报

回复
论坛徽章:
0
18#
发表于 2009-2-15 22:29 | 只看该作者
对ABAP不太熟。能不能象EXCEL里那样,把material和plant两个字段的内容用一个分隔符拼在一起,作为一个新字段,再对这个新字段查找重复记录的个数?如果需要恢复成两个字段,再按分隔符分开。

使用道具 举报

回复
论坛徽章:
10
2009新春纪念徽章
日期:2009-01-04 14:52:282014年新春福章
日期:2014-02-18 16:42:02奥运会纪念徽章:跆拳道
日期:2012-10-26 12:30:18ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15祖国60周年纪念徽章
日期:2009-10-09 08:28:002009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-03-10 21:27:46生肖徽章2007版:狗
日期:2009-02-19 21:05:46生肖徽章2007版:鸡
日期:2009-01-21 16:19:36马上有房
日期:2014-02-18 16:42:02
19#
发表于 2009-2-16 21:31 | 只看该作者
原帖由 saplearner2006 于 2009-2-15 22:29 发表
对ABAP不太熟。能不能象EXCEL里那样,把material和plant两个字段的内容用一个分隔符拼在一起,作为一个新字段,再对这个新字段查找重复记录的个数?如果需要恢复成两个字段,再按分隔符分开。


呵呵,要是有这样方便就太好了。一个COUNTIF()就解决问题了。

使用道具 举报

回复
论坛徽章:
1
2010年世界杯参赛球队:日本
日期:2010-02-09 23:58:39
20#
发表于 2009-3-6 21:15 | 只看该作者

回复 #1 weddingmax 的帖子

建一个hashed internal table, 以material和plant做table key,再加个count字段用来统计每个material和plant组合的数量。
然后loop已有的内表,更新hashed internal table中material和plant组合对应的count字段值。这样不但可以知道那些组合重复,而且可以知道重复的数量

loop的代价是O(n), 访问hashed internal table的代价是O(1), 所以总的时间代价为:O(n)*O(1)=O(n)

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表