Anhand des Stichtags die letzten Datensätze ermitteln

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von kaim77 (Specialist / 200 / 0 / 0 ) »
Guten Abend,

ich habe folgendes Problem. Es gibt eine Tabelle ZGH_PART. Die Tabell hat die Spalten
Partnr, begda, endda, exist und noch andere Spalten.

Ich möchte ein Stichtag vorgeben. Z.B. 11.12.2022. Dann sollen die Datensätze zurückgegeben werden, wo der Stichtag entweder zwischen endda und begda liegt oder der Stichtag größer als endda ist.

D.h. der aktuellste Datensatz mit exist = '2' aller Partnr' soll zurückgegeben werde,

Wie müsste der select hier aussehen?

Z.B. wenn der 06.01.2022 als Stichtag vorgeben wurde und die Tabelle

Partnr Endda Begda exist
4711 20211201 20210511 2
4711 20210411 20210120 2

Hier muss 4711 20211201 20210511 2 zurückgegeben werden.

Wenn als Stichtag 02.02.2021 angegeben wird, dann soll
4711 20210411 20210120 2 zurückgegeben.
Das ganze soll für alle Partnr durchlaufen werden.

Danke für eure Hilfen.
Kaim



Danke
Viele Grüße
Kaim

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von wreichelt (Top Expert / 1036 / 29 / 188 ) »
Hallo,

select * from
where Stichtag >= begda
and exist = 2

Gruß Wolfgang

Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von Shortcut IT (ForumUser / 51 / 2 / 14 ) »
Hallo,
ich wüsste jetzt nicht, wie es mit einem SELECT allein getan sein sollte, da du ja entweder den aktuellsten Satz haben willst, dessen Stichtag in BEGDA...ENDDA reinfällt oder - wenn sich dazu keiner findet - den mit den jüngsten BEGDA/ENDDA.
Der SELECT von @wreichelt ist geeignet, liefert aber ggf. mehrere Sätze pro PARTNR.
Ich würde eine interne Tabelle verwenden und dort ältere Sätze pro PARTNR entfernen.

Code: Alles auswählen.

select * from ZGH_PART into table @data(zghPartners)
    where begda <= @stichtag and exist = '2'
    order by partnr ascending, begda descending.
delete adjacent duplicates from zghPartners comparing partnr.
loop at zghPartners assigning field-symbol(<p>).
  write:/ <p>-partnr, <p>-begda, <p>-endda.
endloop.
Frohes neues Jahr!
Shortcut IT

Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von wreichelt (Top Expert / 1036 / 29 / 188 ) »
Hallo,

er wollte doch

Dann sollen die Datensätze zurückgegeben werden, wo der Stichtag entweder zwischen endda und begda liegt oder der Stichtag größer als endda ist.


Gruß Wolfgang

Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von Shortcut IT (ForumUser / 51 / 2 / 14 ) »
Hallo,
ja, aber er wollte nur einen pro Partnr.
D.h. der aktuellste Datensatz mit exist = '2' aller Partnr' soll zurückgegeben werde,
Gruß
Shortcut IT

Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von JHM (Top Expert / 1191 / 1 / 196 ) »

Code: Alles auswählen.

select * from ZGH_PART into table @data(zghPartners)
    where exist = '2'
      AND begda = SELECT( MAX(begda) FROM ZGH_PART
                                     WHERE begda <= @stichtag
                                      AND PARTNR = ZGH_PART-PARTNR ). 


loop at zghPartners assigning field-symbol(<p>).
  write:/ <p>-partnr, <p>-begda, <p>-endda.
endloop.
Gruß Hendrik

Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von Shortcut IT (ForumUser / 51 / 2 / 14 ) »
Hallo @JHM,
hast du das mal probiert? Bei mir rutscht das nicht durch den Syntax-Check. Von fehlenden Spaces (

Code: Alles auswählen.

...MAX( begda )...
) abgesehen funktioniert der Bezug

Code: Alles auswählen.

...AND PARTNR = ZGH_PART-PARTNR ).
nicht (Field...is unknown.). Auch nicht mit Verwendung eines Alias.
Gruß
Shortcut IT

Re: Anhand des Stichtags die letzten Datensätze ermitteln

Beitrag von Shortcut IT (ForumUser / 51 / 2 / 14 ) »
Hallo,
mit der Tilde statt Bindestrich funktioniert es dann doch:

Code: Alles auswählen.

select * from ZGH_PART into table @data(zghPartners)
    where exist = '2'
      AND begda = ( SELECT MAX( begda ) FROM ZGH_PART
                                     WHERE begda <= @stichtag
                                      AND PARTNR = ZGH_PART~partnr
                                      and exist = '2' ).
loop at zghPartners assigning field-symbol(<p>).
  write:/ <p>-partnr, <p>-begda, <p>-endda.
endloop.
Viele Grüße
Shortcut IT

Seite 1 von 1

Vergleichbare Themen

5
Antw.
6735
Views
Alter ermitteln anhand Geburtsdatum
von Andreas Schlender » 23.05.2007 12:11 • Verfasst in ABAP® für Anfänger
0
Antw.
1359
Views
Nachrichtenfindung anhand KalkSchema ?
von the » 23.02.2005 10:20 • Verfasst in ABAP® für Anfänger
0
Antw.
968
Views
Sortierung anhand von Tabellenspalten
von Lamerman » 18.05.2006 14:33 • Verfasst in ABAP® Core
0
Antw.
1933
Views
EWM: HU mit RBG anhand von Produkt-LB bewegen
von TimTo » 14.02.2019 15:08 • Verfasst in Sonstige Module
4
Antw.
3119
Views
SELECT der letzten ID
von the-FoX » 18.01.2005 18:11 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Dump HTTP_OUT_OF_MEMORY
vor 19 Stunden von Shortcut IT 3 / 77
Wie standardtabelle Updaten?
vor 3 Tagen von A6272 6 / 363
Neue Themen als SAP Entwickler
vor 3 Tagen von IHe 7 / 538
Problem mit Custom-Dynpro in VL02N
vor 3 Tagen von Xilukarim gelöst 2 / 67

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Dump HTTP_OUT_OF_MEMORY
vor 19 Stunden von Shortcut IT 3 / 77
Wie standardtabelle Updaten?
vor 3 Tagen von A6272 6 / 363
Neue Themen als SAP Entwickler
vor 3 Tagen von IHe 7 / 538
Problem mit Custom-Dynpro in VL02N
vor 3 Tagen von Xilukarim gelöst 2 / 67