Мне нужно ВЫБРАТЬ 5 последних уведомлений, связанных с оборудованием, но мне также нужно проверить, что статус DLFL (I0076 - флаг удаления) не активен ИЛИ не существует.
Я думаю, это должно быть довольно просто, но меня немного смущает тот факт, что статус DLFL имеет 3 возможных варианта.
- Существует в таблице JEST с неактивным флагом INITIAL.
- Существует в таблице JEST с неактивным флагом = "X". -> Действительная запись
- Не существует в таблице JEST. -> Действительная запись
Мне удалось получить только последние 5, выбрав все уведомления истории, а затем удалив те, у которых статус DLFL активен, как в приведенном ниже коде, но это означает, что я выбираю сотни строк за последние 20 лет, чтобы использовать только 5 .
Как бы вы этого избежали?
SELECT qmnum, erdat, stat FROM viqmel
LEFT OUTER JOIN jest ON jest~objnr = viqmel~objnr
AND jest~inact = @abap_false
AND jest~stat = 'I0076'
WHERE viqmel~equnr = @equi "Input parameter
AND viqmel~kzloesch = @abap_false
ORDER BY erdat DESCENDING
INTO TABLE @DATA(equi_notifs).
DATA equi_notifs_valid LIKE equi_notifs.
LOOP AT equi_notifs ASSIGNING FIELD-SYMBOL(<equi_notif>) WHERE stat IS INITIAL.
equi_notifs_valid = VALUE #( BASE equi_notifs_valid ( <equi_notif> ) ).
IF lines( equi_notifs_valid ) >= 5.
EXIT.
ENDIF.
ENDLOOP.