ABAP - 选择MAX值与选择条件匹配的行

gku*_*bed -1 abap opensql

这是我希望在AFRU表格中选择的数据样本.

+----------------------+-----------------+-------------------------+
| Confirmation (RUECK) | Counter (RMZHL) | Finish Execution (IEDD) |
+----------------------+-----------------+-------------------------+
|                30116 |               1 | 08/26/2014              |
|                30116 |               2 | 08/27/2014              |
|                30116 |               3 | 09/27/2013              |
+----------------------+-----------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

给定这个数据集,我想选择最后一行,因为它包含最高RMZHL值(我实际上只是在该IEDD记录的值之后).这是我一直在尝试使用的代码:

SELECT MAX( rmzhl ), iedd FROM afru
                          INTO (@DATA(lv_rmzhl), @DATA(lv_iedd))
                          WHERE rueck = '0000030116'
      GROUP BY rmzhl, iedd.
      ...
      <some fancy code here>
      ...
ENDSELECT.
Run Code Online (Sandbox Code Playgroud)

然而,这个选择始终网我的价值观1lv_rmzhl,并且20140826lv_iedd,因此没有得到MAX像我试图获得价值.我明白,通过将所有内容放入内部表格并对RMZHL字段进行排序可以轻松完成,但我正在寻找更合适的方法.

小智 6

您可以执行以下子选择:

SELECT SINGLE iedd
  FROM afru
  INTO @DATA(lv_iedd)
  WHERE rueck = '0000030116'
    AND rmzhl = ( SELECT MAX( rmzhl ) FROM afru WHERE rueck = '0000030116' ).
Run Code Online (Sandbox Code Playgroud)

我已经在很多情况下使用它,即使与它结合使用FOR ALL ENTRIES,性能差异也很小.

  • @gkubed感谢您的建议。您是对的-如果没有括号和“ rmzhl”之间的空格,就不会进行编译。真让我感到烦恼的是,曾经没有使用ABAP编程的人被允许拒绝您对此文章的编辑... (2认同)