[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2005
    Beiträge
    74

    Question SQL Problem/Frage

    Hallo,

    eine Frage an SQL-Experten:

    Ich habe eine Datei in der cronologisch Preisänderungen gespeichert werden. In dieser Datei sind Artikel, Preis und Änderungsdatum enthalten. Ich habe nun unter SQL das Problem, den richtigen Preis zu einem bestimmten Datum zu ermitteln.

    Beispiel:

    Die Datei hat folgenden Inhalt:

    Artikel Datum Preis
    0815 01.01.2005 100€
    0815 13.02.2005 90€
    0815 24.03 2005 80€

    Wenn ich nun den Preis des Artikel 0815 am 01.03.2005 ermitteln soll, würde ich das in RPG folgendermaßen machen:

    settgt (0815:d'01.03.2005') datei;
    readpe (0815) datei;

    und würde dann 90€ erhalten.

    Für SQL habe ich zwar auch ein Lösung gefunden, die aber nicht sehr performant ist:

    SELECT preis
    FROM datei
    WHERE artikel=0815 AND datum=(SELECT MAX(datum) FROM datei AS tt WHERE tt.artikel=datei.artikel AND tt.datum<='01.03.2005')

    Für eine einzelne Abfrage ist die Geschwindigkeit noch in Ordnung aber wenn ich den Wert eines ganzen Lagerbestandes zu einem bestimmten Zeitpunkt ermitteln will, dauert das sehr lange.

    Hat hier jemand einen besseren Lösungsvorschlag?

    Danke im voraus.
    M.Withake

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Leider ist das so bei SQL, dass ein Select normalerweise viele Sätze zurückgibt.
    Nur durch eben deine Methode kannst du gezielt eine einzelne Information bekommen.
    In RPG ist das eben so einfach wie du beschreibst.

    Einen kleinen Trick gibt es aber schon:

    select max(char(datum) || char(Preis)) from datei
    where artikel=0815 and datum<='01.03.2005'

    Damit erfolgt der Zugriff etwas schneller, du hast den Preis und das DAtum jedoch in einem Feld, dass du allerdings wieder trennen kannst:

    with
    xpreis as
    (select max(char(datum) || char(Preis)) as mpreis from datei
    where artikel=0815 and datum<='01.03.2005'
    )
    select date(substr(mpreis, 1, 10)) as datum, dec(substr(mpreis, 11, 11), 11, 2) as preis
    from xpreis

    Vorausgesetzt, das Preisfeld ist dec(11, 2).
    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.365
    Hallo,

    das lässt sich eigentlich nur Datenbanktechnisch, oder funktional lösen:
    - Datum gültig von und gültig bis abspeichern, dann kann man das performant packen
    - SQL Function schreiben, die dann einen Cursor öffnet und den ersten Satz zurück liefert.

    mfg

    Dieter Bender

    Zitat Zitat von mwithake
    Hallo,

    eine Frage an SQL-Experten:

    Ich habe eine Datei in der cronologisch Preisänderungen gespeichert werden. In dieser Datei sind Artikel, Preis und Änderungsdatum enthalten. Ich habe nun unter SQL das Problem, den richtigen Preis zu einem bestimmten Datum zu ermitteln.

    Beispiel:

    Die Datei hat folgenden Inhalt:

    Artikel Datum Preis
    0815 01.01.2005 100?
    0815 13.02.2005 90?
    0815 24.03 2005 80?

    Wenn ich nun den Preis des Artikel 0815 am 01.03.2005 ermitteln soll, würde ich das in RPG folgendermaßen machen:

    settgt (0815:d'01.03.2005') datei;
    readpe (0815) datei;

    und würde dann 90? erhalten.

    Für SQL habe ich zwar auch ein Lösung gefunden, die aber nicht sehr performant ist:

    SELECT preis
    FROM datei
    WHERE artikel=0815 AND datum=(SELECT MAX(datum) FROM datei AS tt WHERE tt.artikel=datei.artikel AND tt.datum<='01.03.2005')

    Für eine einzelne Abfrage ist die Geschwindigkeit noch in Ordnung aber wenn ich den Wert eines ganzen Lagerbestandes zu einem bestimmten Zeitpunkt ermitteln will, dauert das sehr lange.

    Hat hier jemand einen besseren Lösungsvorschlag?

    Danke im voraus.
    M.Withake
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

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 und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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