[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.943
    Hallo,

    wenn ich die Aufgabenstellung richtig verstehe, versuchst Du pro Lager und Artikel den letzten Satz (höchstes Datum mit der höchsten Zeit) zu ermitteln und in die zweite Datei zu übertragen.

    Wie Du bereits festgestellt hast, brauchst dazu mehrere Schritte.
    1. Der Satz mit dem höchsten Datum muss ermittelt werden
    2. Die höchste Urzeit des ausgewählten Datums muss ermittelt werden.
    3. Mit diesen Informationen muss der entsprechende Satz ermittelt werden und in die zweite Datei eingefügt werden.

    Versuch's mal mit folgendem Statement:
    PHP-Code:
    Insert into mytable2
    Select c
    .*
       
    from  (select Lager aLagerArtikel aArtikelMax(DatumaDatum
                from MyTable 
                where Lager 
    'LO' and Datum between 20080901 and 20080930
                Group by Lager
    Artikela
        join 
    (Select Lager bLagerArtikel bArtikelDatum bDatumMax(ZeitbZeit
                from MyTable 
                group by Lager
    ArtikelDatumb
        On aLager 
    Blager and aArtikel bArtikel and aDatum bDatum
        Join  MyTable c
        on Lager 
    aLager and Artikel bArtikel and Datum aDatum and Zeit bZeit 
    Anstatt Sub-Selects in der From-Anweisung könnten auch Common Table Expressions verwendet werden.
    Auf alle Fälle sollten Zugriffswege (DDS beschriebene logische Dateien oder SQL Indices) über Lager/Datum und Lager/Artikel/Datum/Zeit vorhanden sein.

    Bei der obigen Lösung können Zugriffswege verwendet werden. Bei einer Lösung, bei der eine oder mehrere Spalten konvertiert und verknüpft werden, nimmt man dem Optimizer jede Möglichkeit (zumindest vor Release 6.1) Zugriffswege für diese Spalten zu verwenden. Die Folge ist u.U. ein Table Scan, d.h. jeder Satz in der Datei wird gelesen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Feb 2006
    Beiträge
    25
    Besten Dank Brigitta

    Ich benutze natürlich logische Dateien. Aber ich schaff esw nicht, deinLeider schaff ich es mit deinem Statement nicht. Ich bin nicht so versiert, dies umzusetzen oder meine schwarzgrüne Oberfläche will mir nicht helfen.

    Ich habe nur zwei Tabellen.

    Tabelle 1 ist die zu befüllende mit Lagert/Artikel/Datum/Zeit/Suffix und Tabelle 2 sind die Artikeltransaktionen.

    Ich bin etwas ratlos.

    mikka_71

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.943
    Ich benutze natürlich logische Dateien. Aber ich schaff esw nicht, deinLeider schaff ich es mit deinem Statement nicht. Ich bin nicht so versiert, dies umzusetzen oder meine schwarzgrüne Oberfläche will mir nicht helfen.

    Ich habe nur zwei Tabellen.

    Tabelle 1 ist die zu befüllende mit Lagert/Artikel/Datum/Zeit/Suffix und Tabelle 2 sind die Artikeltransaktionen.

    Ich bin etwas ratlos.
    1. Die Verwendung von DDS beschriebenen logischen Dateien in SQL ist so ziemlich das ungeschickteste, was man machen kann. In SQL Statements sollten immer die physischen Dateien oder SQL Views verwendet werden. Bei der Verwendung von logischen Dateien muss das SQL-Statement zunächst vom Optimizer so umgeschrieben werden, dass direkt die physischen Dateien angesprochen werden.

    2. Bunte Oberflächen helfen Dir auch nicht weiter.

    3. Versuche zunächst das SELECT-Statement ohne Insert auszuführen. (Den Insert kann man als letztes drum rum bauen).

    4. In dem SQL-Select-Statement werden quasi 3 "Dateien" erstellt miteinander verknüpft. Dabei wird immer Bezug auf die gleiche Datei genommen.
    In der 1. Datei, die über einen Sub-Select temporär generiert wird, wird das höchste Datum für den angegebenen Lagerort im angegebenen Zeitraum ermittelt.
    Das Ergebnis dieser Abfrage wird über Lager, Artikel und Datum wird wiederum mit der Original-Datei verknüpft, um die höchste Zeit für den in der 1. Abfrage ermittelten Lager, Artikel und Datum zu ermitteln. (2. Sub-Select)
    Im 3. Schritt wird dann das Ergebnis aus der Verknüpfung der ersten beiden Abfragen mit der Original-Datei verknüpft um den kompletten Datensatz und nicht nur Teile davon zu selektieren.
    Am einfachsten ist, wenn Du die einzelnen Sub-Selects nacheinander aufbaust und jeweils prüfst.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Feb 2006
    Beiträge
    25
    Zu Punkt 1. Danke. Habe ich nicht gewusst.

    Zu Punkt 2. Meinte damit eine etwas bedienerfreundlichere Umgebung.

    Zu Punkt 3. Bin ich dran. Muss ja noch versuchen den Suffix irgendwie da ranzujoinen. Es ist möglich dass mehrere Transaktionen zur gleichen Zeit geschrieben werden, diese werden dan fortlaufend hochgezählt.

    Ich versuchs mal und hoffe, dass ich es diese Mal schaffe.

    Danke
    mikka_71

Similar Threads

  1. SQL Datum
    By steven_r in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 04-12-06, 13:16
  2. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 13:44
  3. SQL DATUM
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-11-06, 19:37
  4. Aktuelle Datum und Zeit bei Free-Form
    By lossin in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 08-02-06, 15:09
  5. SQL Datum aus Kalenderwoche?
    By miro in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 11-09-05, 12:11

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •