2020-09-27 00:48发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家们。
我的内部表gt_mara中有一组文章。 我想根据BUDAT(输入日期)从MSEG表中选择最近的两条数据记录,以确保GT_mara的所有条目具有良好的性能。
我可以使用MAX函数。 但是会返回单条记录。 但是我需要两个。
致谢
shefeek m k
我想没有简单的解决方案。 使用较大的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 )。
感谢您的回答。.仍然让我感到困惑,该怎么办..让我提供我的代码,我如何处理..请检查并给我更多性能的方法。 期望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。
ENDIF。
如果lv_count = 1。
lv_count = 2。
ENDLOOP。
删除gt_mseg WHERE编译器<>'SAME'。
使用适当的(二级)排序键增强内部表,并使用(二级)表索引获取两行。
如果您只在我的句子中选择4个单词,也可以怪罪于编写" LOOP降序创建索引"。 这没有什么意义。 :)
你好,
这主要取决于所涉及的条目数。
gt_mara的大小是多少?
对于gt_mara中的1个条目,MSEG中预期有多少个条目?
如果这两个数字相对较小,则可以对gt_mara和MSEG的SELECT(needed_fields)执行LOOP,其中(条件)BUDAT的ORDER BY BUDAT降序最多为2个。 如果您的条件(使用运算符EQ)填写了MSEG激活索引的所有键,则将尽快完成。 如果该索引不存在,则可以在SE11中创建它。
最好的问候
伯特兰
最多设置5个标签!
我想没有简单的解决方案。 使用较大的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 )。
感谢您的回答。.仍然让我感到困惑,该怎么办..让我提供我的代码,我如何处理..请检查并给我更多性能的方法。 期望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'。
使用适当的(二级)排序键增强内部表,并使用(二级)表索引获取两行。
p>如果您只在我的句子中选择4个单词,也可以怪罪于编写" LOOP降序创建索引"。 这没有什么意义。 :)
你好,
这主要取决于所涉及的条目数。
gt_mara的大小是多少?
对于gt_mara中的1个条目,MSEG中预期有多少个条目?
如果这两个数字相对较小,则可以对gt_mara和MSEG的SELECT(needed_fields)执行LOOP,其中(条件)BUDAT的ORDER BY BUDAT降序最多为2个。 如果您的条件(使用运算符EQ)填写了MSEG激活索引的所有键,则将尽快完成。 如果该索引不存在,则可以在SE11中创建它。
最好的问候
伯特兰
一周热门 更多>