ABAP - 选择MAX值匹配选择标准的行

时间:2016-11-04 15:37:21

标签: 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              |
+----------------------+-----------------+-------------------------+

鉴于此数据集,我想选择最后一行,因为它包含最高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.

但是,此选择始终会将1的值lv_rmzhl20140826的{​​{1}}赋予我权限,因此无法获得lv_iedd值,例如I&# 39;我试图得到。我理解他可以通过将所有内容放入内部表并在MAX字段上排序来轻松完成,但我正在寻找更合适的方法。

1 个答案:

答案 0 :(得分:6)

您可以执行以下子选择:

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

即使与FOR ALL ENTRIES结合使用,我也会在很多情况下使用它,性能差异非常小。