如何在ITAB中获取最新记录?

2020-08-21 19:29发布

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

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


嗨,我有一个已排序的内部表,该表根据日期(DATUV)以降序排序。 从表中获取数据时,由于日期不同,我得到了多个重复记录。 我只想保留最新记录,并删除旧的重复记录。 请逻辑帮助我吗?

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

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


嗨,我有一个已排序的内部表,该表根据日期(DATUV)以降序排序。 从表中获取数据时,由于日期不同,我得到了多个重复记录。 我只想保留最新记录,并删除旧的重复记录。 请逻辑帮助我吗?

付费偷看设置
发送
7条回答
悠然的二货
1楼-- · 2020-08-21 20:24

Shashwat Bharadwaj

如果我理解您的问题,您的意思是说,因为那里有多条记录 同一日期,您最近的条目不在顶部。 由于这些原因,您无法获取最新的记录。

下面是我的一些建议:

1)除了"日期"字段外,请检查是否还有其他字段 可以帮助您将最新的文章放在首位。 之后,您可以应用删除相邻的重复项。

2)另外,在使用"非关键"字段进行排序时,请使用STABLE BY关键字。 下面的代码可供参考。

按字段排序SO_IT_TAB。

此外,如果您可以让我们知道要获取的实际表的完整方案,我们将 能够更好地解决您的问题。 请帮助发布问题并提供足够的详细信息,这将有助于更快地解决问题。

问候!

吹牛啤
2楼-- · 2020-08-21 20:07

在这里,您可以看到两个IDNRK 1000012和1000013。每个IDNRK都有两个日期。 在这里,我只希望显示具有最新日期的记录,而不是显示每个IDNRK的所有日期。

这是我正在编写的代码。

 *从STKO和STPO表中获取数据。
       SELECT stko〜stlty,
              stko〜stlnr,
              stko〜stlal,
              stko〜stkoz,
              stko〜bmein,
              stko〜bmeng,
              stko〜stlst,
              stpo〜stlkn,
              stpo〜stpoz,
              stpo〜datuv,
              stpo〜aennr,
              stpo〜idnrk,
              stpo〜posnr,
              stpo〜meins,
              stpo〜menge,
              stpo〜alpos,
              stpo〜ewahr,
              stpo〜clobk,
              stpo〜alpst,
              stpo〜alprf,
              stpo〜alpgr
              从stko INNER JOIN stpo
              开启stko〜stlty = stpo〜stlty
              AND stko〜stlnr = stpo〜stlnr
              插入表@DATA(lt_stpo)
              对于@lt_mast_temp中的所有条目
              在哪里stko〜stlnr = @ lt_mast_temp-stlnr
              AND stko〜stlal = @ lt_mast_temp-stlal
              AND stko〜stlty IN @s_stlty
              AND stko〜stlst IN @s_stlst
              和stko〜lkenz IN @s_lkenz
              和stpo〜idnrk IN @s_idnrk
              和stpo〜posnr IN @s_posnr。
       如果sy-subrc = 0。
         排序lt_stpo BY stlnr stlal。
       万一。
     万一。
 
SAP小菜
3楼-- · 2020-08-21 20:27

如果表格已排序,则可以检查以下示例:

DATA(itab)=值tt_itab(FOR i = 1 THEN i + 1 UNTIL i> 100(date = sy-datum index = i))。

*最后输入:
DATA( 行)=行(itab)。
DATA(最新条目)= itab [行]。

行=行-1.
IF行>0。
删除itab TO行
WHERE date = last_entry-date。 "如果您只想删除找到日期的行。
ENDIF。

此致

Andreas

CPLASF-自律
4楼-- · 2020-08-21 20:12

我正在更新完整方案。 请提供您宝贵的意见。

大简至美
5楼-- · 2020-08-21 20:25

这是一种非常古老的方法,(可能不好,如果您的数据量很大)。 ,这将起作用。

创建一些临时表以对其进行循环-并将最新的录音存储在决赛中。

 it_stpo_temp [] = it_stpo []。
 按idnrk datuv升序对it_stpo_temp进行排序。
 按idnrk datuv升序对it_stpo进行排序。

 move_flag =''。
 以it_stpo_temp循环到wa_stpo_temp。


    "获取由datuv排序的最后一条记录-因此将选择最大记录
    在it_stpo循环到wa_stpo,其中idnrk = wa_stpo_temp-idnrl。
            将对应的wa_stpo_temp移动到wa_stpo_final。
            move_flag ='Y'。
    结束循环。

    如果move_flag ='Y'。
            将wa_stpo_final附加到it_stpo_final。
    万一。
    move_flag =''。


 结束循环。

 " it_stpo_final [] ===是您的最终ittable 
ZJXianG
6楼-- · 2020-08-21 20:08

我正在更新整个方案。请提供您宝贵的意见。

一周热门 更多>