Code: Alles auswählen.
select * from ztab appending corresponding fields of table gt_ztab
where matnr in s_matnr
and ebeln in s_ebeln
and ebelp in s_ebelp
and aedat le p_datum
order by matnr aedat descending.
loop at gt_ztab into za.
at new matnr.
move-corresponding za to wa.
append wa to gt_itab.
endat.
endloop.
Du brauchst wegen dem SubSelect die meisten WHERE-Abfragen zweimal:Asaph hat geschrieben:Wer kann helfen?
Code: Alles auswählen.
select * from ztab into table gt_itab
where matnr in s_matnr
and aedat le p_datum
and ebeln in s_ebeln
and ebelp in s_ebelp
and aedat = ( select max( aedat ) from ztab AS sub
where sub~matnr EQ ztab-matnr
and sub~aedat le p_datum
and sub~ebeln EQ ztab-ebeln
and sub~ebelp EQ ztab-ebelp ).
Code: Alles auswählen.
select * from ztab as z into table gt_ztab
where matnr in s_matnr
and aedat le p_datum
and ebeln in s_ebeln
and ebelp in s_ebelp
and aedat = ( select max( distinct aedat ) from Ztab AS sub
where sub~matnr EQ z~matnr )
order by matnr .
delete adjacent duplicates from gt_ztab comparing matnr.
Schau dir mal den Zusatz DISTINCT beim Select an.Asaph hat geschrieben: Es gibt tatsächlich Einträge mit gleichem AEDAT , die ich wieder eliminiere...
Oder gibt es hier auch noch eine Verbesserung ?
Code: Alles auswählen.
select * from ztab appending corresponding fields of table gt_ztab UP TO 1 rows
where matnr in s_matnr
and ebeln in s_ebeln
and ebelp in s_ebelp
and aedat le p_datum
order by aedat ASCENDING.
Die Idee würde ich auch empfehlen, allerdings mit DESCENDING, da ja das jüngste Datum gesucht wird.Unit605 hat geschrieben:Versuch doch mal folgendes:
Code: Alles auswählen.
select * from ztab appending corresponding fields of table gt_ztab UP TO 1 rows where matnr in s_matnr and ebeln in s_ebeln and ebelp in s_ebelp and aedat le p_datum order by aedat ASCENDING.
Bist Du Dir sicher? Hast Du es mal ausprobiert?Thanatos82 hat geschrieben:Die Idee würde ich auch empfehlen, allerdings mit DESCENDING, da ja das jüngste Datum gesucht wird.Unit605 hat geschrieben:Versuch doch mal folgendes:
Code: Alles auswählen.
select * from ztab appending corresponding fields of table gt_ztab UP TO 1 rows where matnr in s_matnr and ebeln in s_ebeln and ebelp in s_ebelp and aedat le p_datum order by aedat ASCENDING.
Probiert habe ich es nicht, aber wenn ich ascending nach Datum sortiere erhalte ich das kleinste Datum, also das älteste zuerst (z.B. 20160101) und das jüngste damit zuletzt (z.B. 20161013), daher bin ich mir ziemlich sicher, dass es descending sein müsste. Wobei du mich jetzt ein wenig ins Zweifeln gebracht hast.Unit605 hat geschrieben:Bist Du Dir sicher? Hast Du es mal ausprobiert?Thanatos82 hat geschrieben:Die Idee würde ich auch empfehlen, allerdings mit DESCENDING, da ja das jüngste Datum gesucht wird.Unit605 hat geschrieben:Versuch doch mal folgendes:
Code: Alles auswählen.
select * from ztab appending corresponding fields of table gt_ztab UP TO 1 rows where matnr in s_matnr and ebeln in s_ebeln and ebelp in s_ebelp and aedat le p_datum order by aedat ASCENDING.