Selektieren des letzten timestamps


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Selektieren des letzten timestamps

Beitragvon barbara » 02.08.2006, 14:10

Hello,

Wie kann ich aus meinem select den letzten timestamp am schnellsten selektieren?
Mit meinem select funkt. so nicht, richtig?
Code: Alles auswählen
SELECT zzt_pkt_status~sozver zzt_pkt_status~tstmp zzt_pkt_status~zz_pkt_status
         pa0001~endda pa0001~begda pa0001~vdsk1 pa0001~pernr
         zzt_pkt_versns~sozver zzt_pkt_versns~pernr
         FROM zzt_pkt_versns INNER JOIN zzt_pkt_status
           ON zzt_pkt_versns~sozver = zzt_pkt_status~sozver
         INNER JOIN pa0001
           ON zzt_pkt_versns~pernr = pa0001~pernr
         INTO (it_status-sozver, it_status-tstmp, it_status-zz_pkt_status,
              it_pa0001-endda, it_pa0001-begda, it_pa0001-vdsk1, it_pa0001-pernr,
              it_versns-sozver, it_versns-pernr)
           WHERE pa0001~vdsk1 IN s_vdsk1
             AND zzt_pkt_status~zz_pkt_status EQ 'HVB_RECEIV'
             AND pa0001~begda <= p_tag
             AND pa0001~endda >= p_tag
*Gecancelte Daten werden nicht ausgegeben - es gelten nur gültige Nummern
             AND zzt_pkt_versns~lotim EQ '0'.


Und zwar möchte ich nur einen Datensatz ausgeben und zwar der mit dem letzten tstmp received.

Danke!!
liebe Grüsse

Mein Code sieht derzeit folgendermassen aus:
Code: Alles auswählen
REPORT zlobtest03 LINE-SIZE 500 NO STANDARD PAGE HEADING.

*Deklaration der zu verwendeten Tabellen
*Für die Datenbanktabelle wird eine gleichnamige Struktur - der Tabellenarbeitsbereich - angelegt
*Die Struktur des Tabellenarbeitsbereichs entspricht genau der Zeilenstruktur der Datenbanktabelle
TABLES:
  zzt_pkt_status,
  pa0001,
  zzt_pkt_versns.

*Datendeklaration - Datum und Uhrzeit wird für die Konvertierung des timestamp benötigt
DATA:
  datum LIKE sy-datum,
  zeit  LIKE sy-uzeit,
  tag   LIKE sy-datum,
*Die internen Tabellen werden für das inner join - select verwendet
  it_status  TYPE TABLE OF zzt_pkt_status WITH HEADER LINE,
  it_pa0001  TYPE TABLE OF pa0001 WITH HEADER LINE,
  it_versns  TYPE TABLE OF zzt_pkt_versns WITH HEADER LINE,
*Zusätzlich wird eine workarea zum Hinzufügen eines neuen Status in die Statustab. definiert
  wa_status  TYPE zzt_pkt_status,
*Wird für die Ausgabe als Fixformat gebraucht
  wa_tstmp   LIKE zspkt_timestamp.

*Selektionsblock für die Eingabe des timestamp
SELECTION-SCREEN BEGIN OF BLOCK auswahl WITH FRAME.
*Selektionsbildschirm
SELECT-OPTIONS: s_vdsk1 FOR pa0001-vdsk1.
PARAMETERS: p_tag LIKE sy-datum.
SELECTION-SCREEN END OF BLOCK auswahl.

*Block für Dateiverarbeitung
SELECTION-SCREEN BEGIN OF BLOCK va WITH FRAME.
PARAMETERS:
  p_datei AS CHECKBOX,
*Feld zur Eingabe des Dateinamens - der Pfad wird vorgeschlagen
  p_fname&#40;100&#41; DEFAULT '/usr/sap/pmscp/' LOWER CASE.
SELECTION-SCREEN END OF BLOCK va.

*Hauptverarbeitung
START-OF-SELECTION.

*Wenn die Checkbox `Datenausgabe in einer Datei´ angeklickt wurde
  IF  p_datei =  'X'.
*Wenn der Dateiname in das Feld nicht eingetragen wurde, dann erscheint eine Meldung
    IF p_fname = '/usr/sap/pmscp/'.
      WRITE: / 'Dateiname fehlt'.
      EXIT.
    ENDIF.
*Wenn der Dateiname in das Feld nicht eingetragen wurde, dann erscheint eine Meldung
    IF p_fname IS INITIAL.
      WRITE: / 'Dateiname fehlt'.
      EXIT.
    ENDIF.
*Datei wird zum Schreiben geöffnet - Daten werden zeilenweise geschrieben
    OPEN DATASET p_fname FOR OUTPUT IN TEXT MODE.
  ENDIF.

*Wenn der Stichtag leer ist und der Organisationsschlüssel ist befüllt,
*dann wird das Datum auf das akt. Tagesdatum gesetzt
  IF p_tag IS INITIAL.
    p_tag = sy-datum.
  ENDIF.
  IF s_vdsk1 IS NOT INITIAL.
    p_tag = sy-datum.
  ENDIF.

*Die Daten werden aus der Tabelle zzt_pkt_status, pa0001 und zzt_pkt_versns selektiert,
*und mit inner join über die Sozialversicherungsnummer aus den Tabellen versns und status
*und über die Personalnummer der Tabellen versns und pa0001 verbunden.
*Es werden Daten ausgegeben, die nach dem vom User eingegebenen timestamp Daten vom HVB
*enthalten haben, und es sollen die Daten ausgegeben werden, die im Feld zz_pkt_status den
*Eintrag HVB_RECEIV haben.
  SELECT zzt_pkt_status~sozver zzt_pkt_status~tstmp zzt_pkt_status~zz_pkt_status
         pa0001~endda pa0001~begda pa0001~vdsk1 pa0001~pernr
         zzt_pkt_versns~sozver zzt_pkt_versns~pernr
         FROM zzt_pkt_versns INNER JOIN zzt_pkt_status
           ON zzt_pkt_versns~sozver = zzt_pkt_status~sozver
         INNER JOIN pa0001
           ON zzt_pkt_versns~pernr = pa0001~pernr
         INTO &#40;it_status-sozver, it_status-tstmp, it_status-zz_pkt_status,
              it_pa0001-endda, it_pa0001-begda, it_pa0001-vdsk1, it_pa0001-pernr,
              it_versns-sozver, it_versns-pernr&#41;
           WHERE pa0001~vdsk1 IN s_vdsk1
             AND zzt_pkt_status~zz_pkt_status EQ 'HVB_RECEIV'
             AND pa0001~begda <= p_tag
             AND pa0001~endda >= p_tag
*Gecancelte Daten werden nicht ausgegeben - es gelten nur gültige Nummern
             AND zzt_pkt_versns~lotim EQ '0'.

*Wenn Datensätze gefunden wurden
    IF sy-subrc EQ 0.
*Konvertiere den timestamp unter Berücksichtigung der Zeitzone in Datum und Zeit
      CONVERT TIME STAMP it_status-tstmp TIME ZONE sy-zonlo INTO DATE datum TIME zeit.
*Den Feldern der workarea wird der in die Tab. zzt_pkt_status neu einzutragende Status zugewiesen
*Der eingegebene timestamp des users wird ebenfalls in die Tabelle eingetragen
      wa_status-zz_pkt_status = 'BMLV_HVBCH'.
      wa_status-statusart = 'T'.
*Der neue Status wird in die Tabelle zzt_pkt_status geschrieben
      MODIFY zzt_pkt_status FROM wa_status.
*Ausgabe der Daten
      PERFORM ausgeben USING it_pa0001-pernr  CHANGING wa_tstmp-pernr.
      PERFORM ausgeben USING it_status-sozver CHANGING wa_tstmp-sozver.
      PERFORM ausgeben USING datum            CHANGING wa_tstmp-datum.
      PERFORM ausgeben USING zeit             CHANGING wa_tstmp-zeit.
      PERFORM ausgeben USING it_pa0001-vdsk1  CHANGING wa_tstmp-vdsk1.

    ENDIF.

  ENDSELECT.

**Wenn kein Datensatz gefunden wurde
  IF sy-subrc NE 0.
*Dann wird eine dementsprechende Meldung ausgegeben
    WRITE: / 'Es wurden keine Datensätze gefunden.'.
  ENDIF.

  IF p_datei = 'X'.
    PERFORM ausgabe_zeile USING wa_tstmp.
    WRITE: / 'Erzeugter Dateiname:', p_fname.
  ELSE.
    WRITE: / wa_tstmp.
  ENDIF.

*Wenn die Checkbox `Datenausgabe in einer Datei´ angeklickt wurde
  IF p_datei = 'X'.
*Schließen der Datei
    CLOSE DATASET p_fname.
  ENDIF.

END-OF-SELECTION.
*&amp;---------------------------------------------------------------------*
*&amp;      Form  ausgeben
*&amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TEXT  text
*      <--P_AUSGSTR  text
*----------------------------------------------------------------------*
FORM ausgeben  USING    p_text
               CHANGING p_zielfeld.

*Deklaration der Var. ausgabe_temp
  DATA: ausgabe_temp&#40;1000&#41; TYPE c.

*Schreiben des Ausgabestrings
  WRITE: p_text TO ausgabe_temp LEFT-JUSTIFIED.

  p_zielfeld = p_text.

ENDFORM.                    " ausgeben
*&amp;---------------------------------------------------------------------*
*&amp;      Form  ausgabe_zeile
*&amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_AUSGSTR  text
*      -->P_WA_INFO  text
*----------------------------------------------------------------------*
FORM ausgabe_zeile USING p_struktur.

  IF p_datei = 'X'.
    TRANSFER p_struktur TO p_fname.
  ELSE.
    WRITE: / p_struktur.
  ENDIF.

ENDFORM.                    " ausgabe_zeile
barbara
ForumUser
 
Beiträge: 50
Registriert: 09.03.2006, 15:49
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Applikations-Toolbar dynamisch erzeugen
vor 9 Stunden von ralf.wenzel 0 Antw.
CP_BD_DIRECT_INPUT_PLAN
Gestern von Gottschall 0 Antw.
Logische Datenbank: Selektieren mit Loop
vor 4 Stunden von deejey 12 Antw.
Globale Konstanten - Organisationseinheiten
vor 13 Stunden von ralf.wenzel 5 Antw.
Kein Zugriff auf Dateien im Applikationsserver
Gestern von zzcpak 1 Antw.

  Ähnliche Beiträge beta
letzten fünf zeichen anzeigen
01.09.2003, 14:23 von zzcpak 3 Antw.
Letzten Wert im Loop ausgeben
28.03.2012, 06:01 von Thomas R. 4 Antw.
Get 'Datum des letzten Freitag vor jeden Monatsersten'
02.08.2005, 15:16 von black_adept 9 Antw.
Analyse was der User in den letzten Tagen gemacht hat
07.11.2006, 13:30 von black_adept 4 Antw.
Erster und letzten Datensatz eines Reports
25.06.2009, 10:28 von sacair 4 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder