Code: Alles auswählen.
select kostl ktext
from cskt
into table gt_cskt
for all entries in gt_blablub
where spras = 'EN'
and kokrs = p_kokrs
and kostl = gt_blablub-kostl.
and datbi = ????.
Code: Alles auswählen.
...and datbi >= sy-datum
and datab <= sy-datum.
Warum ist bei einem aktuell gültigen satz das "Bis-gültig-Datum" kleiner als das aktuelle Datum??ralf.wenzel hat geschrieben:Ich will hierbei den aktuell gültigen Satz selektieren, sprich den mit dem höchsten Datum, das aber kleiner als SY-DATUM sein muss.
Das sollte dann wohl eher auf die in der Zukunft geplanten zutreffen.ralf.wenzel hat geschrieben:DATBI GT SY-DATUM geht auch nicht, weil das im Zweifel auf ne Menge Sätze zutrifft, insbesondere auf die veralteten.
Du hast recht, es ist der jeweils erste Satz wo das aktuelle Datum GRÖSSER ist als DATBI.ewx hat geschrieben:Warum ist bei einem aktuell gültigen satz das "Bis-gültig-Datum" kleiner als das aktuelle Datum??
Genau so mach ich es. Danke für den Tipp.ewx hat geschrieben:Das sollte dann wohl eher auf die in der Zukunft geplanten zutreffen.
Und die könnte man dann doch später mit DELETE ADJACENT DUPLICATES rauslöschen, oder?
Also SELECT ... WHERE DATBI >= SY-DATUM
Hallo Ralf,ralf.wenzel hat geschrieben:...Ich will hierbei den aktuell gültigen Satz selektieren, sprich den mit dem höchsten Datum, das aber kleiner als SY-DATUM sein muss.Code: Alles auswählen.
select kostl ktext from cskt into table gt_cskt for all entries in gt_blablub where spras = 'EN' and kokrs = p_kokrs and kostl = gt_blablub-kostl. and datbi = ????.
Ich weiß, ich könnte das mit Einzelsatz-Selektion machen, aber bei Massendaten ist das nicht wirklich klug.
DATBI GT SY-DATUM geht auch nicht, weil das im Zweifel auf ne Menge Sätze zutrifft, insbesondere auf die veralteten.
Gibts einen EINFACHEN und von der Laufzeit her SCHNELLEN Weg, die (zur Laufzeit) aktuell gültigen Texte zu selektieren?
Ralf
P.S.: Ja, das EN als Sprache soll hart verdrahtet sein
Code: Alles auswählen.
select tx~kostl
tx~ktext
from cskt AS tx
into table gt_cskt
for all entries in gt_blablub
where spras = 'E' "intern einstellig !!!!
and kokrs = p_kokrs
and kostl = gt_blablub-kostl.
AND datbi IN (SELECT datbi
UP TO 1 ROWS
FROM cskt AS dt
WHERE dt~spras EQ tx~spras
AND dt~kokrs EQ tx~kokrs
AND dt~kostl EQ tx~kostl
AND dt~datbi GE sy-datum
ORDER BY dt~datbi DESCENDING ).
...aber nicht, dass du dann die Zeit zu der du wieder zu Hause sein solltest mit der Zeit verwechselst zu der du tatsächlich zu Hause gewesen sein hättest dürfen solln...ralf.wenzel hat geschrieben:Ob ich mal wieder auf den DOM gehen sollte?
Mit Aggregation geht auch der Subselect:ereglam hat geschrieben: so in etwa habe ich es mir vorgestellt, geht aber leider nicht, weil im Subselect kein UP TO n ROWS oder ORDER BY verwendet werden darf...
Code: Alles auswählen.
select tx~kostl
tx~ktext
from cskt AS tx
into table gt_cskt
for all entries in gt_blablub
where spras = 'E' "intern einstellig !!!!
and kokrs = p_kokrs
and kostl = gt_blablub-kostl.
AND datbi = (SELECT MIN(dt~datbi)
FROM cskt AS dt
WHERE dt~spras EQ tx~spras
AND dt~kokrs EQ tx~kokrs
AND dt~kostl EQ tx~kostl
AND dt~datbi GE sy-datum ).
Danke. Hatte gestern nicht genügend Zeit, es weiter zu verfolgen und ohnehin viel zu kompliziert gedacht, aber von Ansatz her war ich schon auf dem richtigen Weg...JHM hat geschrieben:Mit Aggregation geht auch der Subselect:ereglam hat geschrieben: so in etwa habe ich es mir vorgestellt, geht aber leider nicht, weil im Subselect kein UP TO n ROWS oder ORDER BY verwendet werden darf...
Code: Alles auswählen.
select tx~kostl tx~ktext from cskt AS tx into table gt_cskt for all entries in gt_blablub where spras = 'E' "intern einstellig !!!! and kokrs = p_kokrs and kostl = gt_blablub-kostl. AND datbi = (SELECT MIN(dt~datbi) FROM cskt AS dt WHERE dt~spras EQ tx~spras AND dt~kokrs EQ tx~kokrs AND dt~kostl EQ tx~kostl AND dt~datbi GE sy-datum ).