如何基于MSEG中的最新BUDAT选择两个记录

2020-09-27 00:48发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们。

我的内部表gt_mara中有一组文章。 我想根据BUDAT(输入日期)从MSEG表中选择最近的两条数据记录,以确保GT_mara的所有条目具有良好的性能。

我可以使用MAX函数。 但是会返回单条记录。 但是我需要两个。

致谢

shefeek m k

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们。

我的内部表gt_mara中有一组文章。 我想根据BUDAT(输入日期)从MSEG表中选择最近的两条数据记录,以确保GT_mara的所有条目具有良好的性能。

我可以使用MAX函数。 但是会返回单条记录。 但是我需要两个。

致谢

shefeek m k

付费偷看设置
发送
5条回答
大道至简
1楼-- · 2020-09-27 01:17

我想没有简单的解决方案。 使用较大的SELECT并从内部表中删除条目(请参阅Horst答案),或者如果使用的是较小的内容,请参阅Bertrand答案),或者使用本机SQL(您也必须摆脱FOR ALL ENTRIES;对于 Oracle,使用RANK,您可以在这里查看: https://stackoverflow.com/questions/2306744/oracle-sql-how-to-retrieve-highest-5-values-of-a-column )。

路亽曱_Ryan
2楼-- · 2020-09-27 01:19

感谢您的回答。.仍然让我感到困惑,该怎么办..让我提供我的代码,我如何处理..请检查并给我更多性能的方法。 期望GT_mara是15000条记录,并且mseg中的每种材料都得到20000条记录。

--->首先选择mseg数据。

SELECT matnr bwart werks lgort umwrk shkzg budat_mkpf ebeln lifnr

从mseg到表gt_mseg中,用于gt_mara中的所有条目

matnr EQ gt_mara-matnr在哪里,并在so_werks和

中出现

bwart EQ'101'和lifnr NE空间。

----->选择最新的两个记录以进行比较。 如果相同的第一条记录更新为" SAME",则

----->如果不同,则将其更新为" DIFF"。 最后保留获得"相同"的记录。 删除其余全部。

排序gt_mseg由matnr budat降序。

清除lwa_mseg。

将gt_mseg循环播放到INTO gwa_mseg中。

lv_tabix = sy-tabix。

lwa_mseg_tmp = gwa_mseg。

在新的matnr。

lwa_mseg = lwa_mseg_tmp。

lv_count = 1。

gwa_mseg-compr ='SAME'。

从gwa_mseg修改gt_mseg索引lv_tabix TRANSPORTING compr。

ENDAT。

如果gwa_mseg-matnr = lwa_mseg-matnr。

如果lv_count =2。

如果lwa_mseg-umwrk = gwa_mseg-umwrk。

清除lv_count。

继续。

其他。

gwa_mseg-compr ='DIFF'。

lv_tabix = lv_tabix-1.

从gwa_mseg索引lv_tabix TRANSPORTING编译器修改gt_mseg。

清除lv_count。

继续。

ENDIF。

ENDIF。

如果lv_count = 1。

lv_count = 2。

ENDIF。

ENDIF。

ENDLOOP。

删除gt_mseg WHERE编译器<>'SAME'。

三十六小时_GS
3楼-- · 2020-09-27 01:19

使用适当的(二级)排序键增强内部表,并使用(二级)表索引获取两行。

p>
天桥码农
4楼-- · 2020-09-27 01:01

如果您只在我的句子中选择4个单词,也可以怪罪于编写" LOOP降序创建索引"。 这没有什么意义。 :)

四川大学会员
5楼-- · 2020-09-27 01:15

你好,

这主要取决于所涉及的条目数。

gt_mara的大小是多少?

对于gt_mara中的1个条目,MSEG中预期有多少个条目?

如果这两个数字相对较小,则可以对gt_mara和MSEG的SELECT(needed_fields)执行LOOP,其中(条件)BUDAT的ORDER BY BUDAT降序最多为2个。 如果您的条件(使用运算符EQ)填写了MSEG激活索引的所有键,则将尽快完成。 如果该索引不存在,则可以在SE11中创建它。

最好的问候

伯特兰

一周热门 更多>