1

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_rmzhl20140826lv_ieddMAXRMZHL

4

1 に答える 1

8

次のような副選択を行うことができます。

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おり、性能差は非常に少ないです。

于 2016-11-04T17:53:03.097 に答える