[NEWSboard IBMi Forum]

Thema: SQL view

  1. #1
    Registriert seit
    Dec 2003
    Beiträge
    42

    SQL view

    Hallo Forum,insbesondere die SQL Freaks

    ist folgendes realisierbar:
    ich habe eine Preisdatei mit folgenden Feldern:
    artnr-teil1, artnr-teil2, ..... preis,tag,monat,jahr,....

    pro art-nr können beliebig viele Einträge mit jeweils unterschiedlichem Gültigkeitsdatum (auch zukünftigem) existieren.

    ich möchte eine SQL-View, die mir pro Artikel genau den einen
    Eintrag mit dem größten Datum <= heute anzeigt.
    (Artikel-Nr besteht aus 2 CHAR-Feldern, Gültigkeitsdatum
    besteht aus 3 x 2S 0 Feldern)

    Vielen Dank schon mal

    Gruss
    Wolfgang

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.269
    select ....
    from myfile a
    where a.artnr concat digits(a.jahr) concat digits(a.monat) concat digits(a.tag) =
    (select max(b.artnr concat digits(b.jahr) concat digits(b.monat) concat digits(b.tag))
    from myfile b
    where a.artnr = b.artnr
    and date('20' concat digits(b.jahr) concat '-' concat digits(b.monat) concat '-' concat digits(b.tag)) <= current date)

    Einfache wäre es, wenn das Datum (insbesonders das Jahr) bereits 8-stellig oder als Typ Date vorläge.

    Als View ist das aber nicht unbedingt geeignet, da kein Order by möglich ist und der Zugriff dann ggf. etwas dauert.
    Einfacher wäre der SQL direkt im Programm mit Parametern z.B. auf Artikel-Nr.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    Hallo,

    alternativ geht auch als join (den select max(...) mit der Table selber joinen) könnte schneller sein als die rekursive Lösung, die Baldur vorschlägt.
    Ich würde schon zu der View raten, da dann das komplexe des Statements im Programm weg ist. Wenn man einen ORDER braucht, dann gibt man den bei dem Zugriff an.
    Wie lange das ganze beim Zugriff selber dauert, das hängt davon ab, ob die entsprechenden Zugriffspfade da sind und da sieht es mit dem MAX über ein gebasteltes Feld schlecht aus, egal ob View, oder im SELECT beim Zugriff.

    mfg

    Dieter Bender


    Zitat Zitat von Fuerchau
    select ....
    from myfile a
    where a.artnr concat digits(a.jahr) concat digits(a.monat) concat digits(a.tag) =
    (select max(b.artnr concat digits(b.jahr) concat digits(b.monat) concat digits(b.tag))
    from myfile b
    where a.artnr = b.artnr
    and date('20' concat digits(b.jahr) concat '-' concat digits(b.monat) concat '-' concat digits(b.tag)) <= current date)

    Einfache wäre es, wenn das Datum (insbesonders das Jahr) bereits 8-stellig oder als Typ Date vorläge.

    Als View ist das aber nicht unbedingt geeignet, da kein Order by möglich ist und der Zugriff dann ggf. etwas dauert.
    Einfacher wäre der SQL direkt im Programm mit Parametern z.B. auf Artikel-Nr.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.269
    @Dieter

    Beim Join hast du das Problem, dass du nur mit 1:1 bzw. 1:n-Beziehungen arbeiten kannst, also nur Feld auf Feld bzw. Konstante auf Feld.
    Du bekommst aber leider immer mehrere Sätze.
    Die Forderung war nun mal, genau 1 Satz zu bekommen. Und hier steht SQL vor einem großen Problem (dass ich seit Einführung von Mandanten immer wieder habe).

    Ich kann leider immer nur EIN Feld mit EINEM Ergebnisfeld eines Subselect verknüpfen.
    Bei Mandanten habe ich aber immer noch 1 bis n zusätzliche Felder.
    Um also diese Bedingung zu erreichen, muss ich mir mit CONCAT behelfen und da sind leider Zufgriffspfade ehe machtlos.

    Bei der DB/400 habe ich einen leichten Vorteil, wenn ich DDS zu Hilfe nehme. Denn nur da kann ich mit berechneten Feldern (SUBST/CAT/DIGITS) auch einen Index erstellen !
    Bei SQL geht das leider noch nicht (oder kenne ich das nur nicht ?).

    Warum gehen auch die schönen SQL-Beispiele (übrigens auch anderer DB's) immer nur von EINEM Schlüsselfeld aus ?

    Übrigens: SAP/R3 behilft sich da eben mit so unschönen Mitteln wie internen Strukturen auf Schlüsselfeldern.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    @Baldur:
    Irgendwas in folgender Art:
    select b.*
    from
    (select artnr, max(concat(datum...)) as maxdat
    from artikel....
    group by artnr) as a, artikel as b
    where a.artnr = b.artnr
    and maxdat = concat(b.datum....)

    Dieter Bender

    Zitat Zitat von Fuerchau
    @Dieter

    Beim Join hast du das Problem, dass du nur mit 1:1 bzw. 1:n-Beziehungen arbeiten kannst, also nur Feld auf Feld bzw. Konstante auf Feld.
    Du bekommst aber leider immer mehrere Sätze.
    Die Forderung war nun mal, genau 1 Satz zu bekommen. Und hier steht SQL vor einem großen Problem (dass ich seit Einführung von Mandanten immer wieder habe).

    Ich kann leider immer nur EIN Feld mit EINEM Ergebnisfeld eines Subselect verknüpfen.
    Bei Mandanten habe ich aber immer noch 1 bis n zusätzliche Felder.
    Um also diese Bedingung zu erreichen, muss ich mir mit CONCAT behelfen und da sind leider Zufgriffspfade ehe machtlos.

    Bei der DB/400 habe ich einen leichten Vorteil, wenn ich DDS zu Hilfe nehme. Denn nur da kann ich mit berechneten Feldern (SUBST/CAT/DIGITS) auch einen Index erstellen !
    Bei SQL geht das leider noch nicht (oder kenne ich das nur nicht ?).

    Warum gehen auch die schönen SQL-Beispiele (übrigens auch anderer DB's) immer nur von EINEM Schlüsselfeld aus ?

    Übrigens: SAP/R3 behilft sich da eben mit so unschönen Mitteln wie internen Strukturen auf Schlüsselfeldern.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Dec 2003
    Beiträge
    42
    Vielen Dank für Tipps !!!

    Gruss
    Wolfgang

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. SQL -> CREATE VIEW
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 17
    Letzter Beitrag: 11-05-06, 14:57
  5. SQL VIEW
    By KM in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 12-01-06, 08:52

Berechtigungen

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