Nur im SQL (also im SELECT) wirst Du diese Anforderung nicht verbacken bekommen, sondern Du musst erst mal aus der Datenbank lesen und dann Dein Ziel in der internen Tabelle erreichen.
Zunächst einmal möchte ich Dir aber nahelegen, den OR aus der WHERE-Klausel durch IN zu ersetzen, da er Dir als OR den Indexzugriff ruiniert
(abhängig davon, was für Indizes Deine Datenbanktabelle hat) und sich auch schlechter liest. Also:
Code: Alles auswählen.
SELECT att1 att2 datum1 datum2 typ att3 att4
FROM tabelle INTO CORRESPONDING FIELDS OF TABLE gt_tabelle
WHERE att1 = pa_att1
AND typ IN ('1','2')
ORDER BY typ ASCENDING datum1 DESCENDING datum2 ASCENDING.
Sodann ist der Zusammenhang zwischen Deinem SELECT mit den komischen ORDERs und Deiner Anforderung auch nicht wirklich erkennbar. Wenn ich Dich richtig verstehe, dann sollte der folgende Code (nach Deinem SELECT) Deine Anforderung erfüllen:
Code: Alles auswählen.
data: ergebnis_typ_1 like line of gt_tabelle,
ergebnis_typ_2 like line of gt_tabelle.
sort gt_tabelle by typ datum1 descending datum2 descending.
ergebnis_typ_1 = gt_tabelle[ typ = '1' ].
ergebnis_typ_2 = gt_tabelle[ typ = '2' ].
Die beiden Zuweisungen am Ende liefern die jeweils erste Zeile des jeweiligen Typs, und aufgrund des davor stehenden SORTs sollte das die sein, die Deiner Anforderung entspricht.
Wenn nicht, erläutere Deine Anforderung bitte noch einmal genauer. Generell ist es auch hilfreich, bei jeglichen Codefragmenten die genaue Typisierung der Felder bzw. Tabellen mitzuliefern.