点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我已经声明了一个内部表,例如
数据:wa_collectoraction TYPE zcollectoraction, it_collectoraction类似于zcollectoraction的标准表。
我们有以下记录:
200-1000-620-201708-20170819-20170819121212.356 ................................. ............
200-1000-620-201708-20170819-20170819121211.356 .................................... .....
200-1000-620-201708-20170815-20170815121211.31.3 .................................... ......
200-1000-620-201707-20170710-20170710121200.356 ................................. ......
200-1000-620-201707-20170710-20170710121100.356 .................................... ......
200-1000-620-201707-20170709-20170709121100.356 .................................... ......
然后我用以下2条记录填充表格
200-1000-620-201708-20170819
200-1000-620-201707-20170710
选择bukrs kunnr yearmonth MAX(dat)AS dat 来自zcollectoraction 到表it_collectoraction的对应字段 so_bukrs在哪里以及 kunnr IN so_kunnr AND 日期 GROUP BY Bukrs kunnr yearmonth。
最后,我进入了以下循环,获取每个记录的最长时间,然后使用关键字段获取记录的所有剩余字段。
在it_collectoraction INTO wa_collectoraction中循环。 PERFORM progress_bar使用"正在检索数据..."(035) sy-tabix i_tab_lines。 "为所有线路获取最大时间,以解决我们有多于一条线路的情况。 选择单*从zcollectoraction wa_collectoraction的相应领域 其中bukrs = wa_collectoraction-bukrs并且 kunnr = wa_collectoraction-kunnr AND dat = wa_collectoraction-dat和 时间=(SELECT MAX(时间)AS时间 来自zcollectoraction 其中bukrs = wa_collectoraction-bukrs并且 kunnr = wa_collectoraction-kunnr AND dat = wa_collectoraction-dat)。 从wa_collectoraction修改it_collectoraction。 ENDLOOP。
此循环执行5分钟,记录3000条记录。 循环的itab拥有30500条记录。
我希望自己变得更加清晰。
有人可以告诉我怎么做才能更快?
预先感谢
首先,我要感谢大家的帮助。
我根据用户的选择数据,通过使用内部表和dbtab中的所有记录来更改选择的逻辑。
因此,代码如下:
此代码在1分钟内运行43000条记录。
唯一的问题是,在开始的10000至15000条记录之后,该过程正在放缓。 我不知道是否有任何命令可以清除某物。 我不知道该清除什么。
再次感谢大家。
致谢
Elias
PS。 在1st 10秒内处理14.000条记录。
在1分钟内处理38.500和
在1分钟50秒内完成了54.500条记录。
给我的印象是,它可以满足某项要求,从而减慢了该过程。
有任何想法吗?
循环中的SELECT,您想知道它很慢吗?
您是否尝试过某些子查询,如
当然,首先要检查数据库表上是否有足够的索引。
对于那些(大多数)无权访问您的z表的用户,您可以使用
针对任何类型的循环/选择单个/结束循环或所有条目来检查性能。对不起,我不明白为什么要将同一表的子查询放入该SELECT SINGLE中。 如果要查找MAX日期值,则只需将其放在第一个SELECT中即可。 当然,您将无法使用SELECT *,但是由于您具有相应功能,我想您甚至不需要*。 当然,这很方便,但几乎没有理由牺牲性能。
提供一个数据示例来解释您到底在寻找什么以及您想要达到的结果可能是有意义的。
阅读所有内容,我的印象是 一个更好的主意是退后一步,考虑一下您要实现的目标(对我来说仍然不清楚),并查看您的表设计。
Jelena,
好吧,我告诉你。 在选择中,我将选择月份的最大日期的特定字段。 然后,我选择具有最大时间的记录的所有字段,因为很有可能将一个以上的记录作为最大日期。 这是一个例子。
这些是关键字段:MANDT-BUKRS-KUNNR-YEARMONTH-DAT-TIME
200-1000-620-201708-20170819-20170819121212.356
200-1000-620-201708-20170819-20170819121211.356
200-1000-620-201708-20170815-20170815121211.356
200-1000-620-201707-20170710-20170710121200.356
200-1000-620-201707-20170710-20170710121100.356
200-1000-620-201707-20170709-20170709121100.356
所以我想显示一个月的最大日期,如果最大日期中存在多于1条记录,我想获得最大时间。
嗯,还有其他方法吗?
预先感谢
还请检查是否不是进度条导致了较长的执行时间。
一周热门 更多>