[NEWSboard IBMi Forum]

Thema: SQL Problem

  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    425

    SQL Problem

    Hi,
    wir haben in einer Datei mehrere Preise
    ich soll nun die ersten beiden Preise vergleichen.
    Aufbau
    lfNr. Produkt Preis ...

    manche Produkte hatten in der zwischenzeit 30 - 40 Preise, manche nur genau einen.

    Ergebnis soll sein
    Produkt Aktueller-Preis vorheriger-Preis Differenz

    (höchste lfnr = aktuelle Preis)

    hab versucht mit "with" etwas zu zaubern, bin aber anscheinend ein mieser Zauberer.

    Mit RPG kein Prob. aber mit SQL?

    ach ja, V5R4 ist drauf !

  2. #2
    Registriert seit
    Apr 2004
    Beiträge
    105
    wahrscheinlich nicht die eleganteste Lösung, aber es müßte funktionieren:

    PHP-Code:
    select a.produkt, (select b.preis
        from preistabelle 
    as b
        where b
    .produkt a.produkt
        
    and b.lfnr in (select max(c.lfnr)
                
    from preistabelle as c
                where c
    .produkt b.produkt)) as aktueller_preis,
            
    ifnull((select d.preis
        from preistabelle 
    as d
        where d
    .produkt a.produkt
        
    and d.lfnr in (select max(e.lfnr)-1
                from preistabelle 
    as e
                where e
    .produkt d.produkt)), 0) as vorheriger_preis,
            (
    select f.preis
        from preistabelle 
    as f
        where f
    .produkt a.produkt
        
    and f.lfnr in (select max(g.lfnr)
                
    from preistabelle as g
                where g
    .produkt f.produkt)) - 
            
    ifnull((select h.preis
        from preistabelle 
    as h
        where h
    .produkt a.produkt
        
    and h.lfnr in (select max(i.lfnr)-1
                from preistabelle 
    as i
                where i
    .produkt h.produkt)), 0) as differenz
    from produkttabelle 
    as 

  3. #3
    Registriert seit
    Apr 2004
    Beiträge
    105
    wahrscheinlich nicht die eleganteste Lösung, aber es müßte funktionieren:

    PHP-Code:
    select a.produkt, (select b.preis
        from preistabelle 
    as b
        where b
    .produkt a.produkt
        
    and b.lfnr in (select max(c.lfnr)
                
    from preistabelle as c
                where c
    .produkt b.produkt)) as aktueller_preis,
            
    ifnull((select d.preis
        from preistabelle 
    as d
        where d
    .produkt a.produkt
        
    and d.lfnr in (select max(e.lfnr)-1
                from preistabelle 
    as e
                where e
    .produkt d.produkt)), 0) as vorheriger_preis,
            (
    select f.preis
        from preistabelle 
    as f
        where f
    .produkt a.produkt
        
    and f.lfnr in (select max(g.lfnr)
                
    from preistabelle as g
                where g
    .produkt f.produkt)) - 
            
    ifnull((select h.preis
        from preistabelle 
    as h
        where h
    .produkt a.produkt
        
    and h.lfnr in (select max(i.lfnr)-1
                from preistabelle 
    as i
                where i
    .produkt h.produkt)), 0) as differenz
    from produkttabelle 
    as 

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    425

    leider nicht(ganz)

    Hallo woki, danke erstmal.

    ich muß schon sagen...
    Hut ab, wie kommt man den auf sowas ?

    Aber leider ...
    beim abtippen ist mir folgendes aufgefallen:

    1. kann leider so nicht Funktionieren, da die lfnr Produktübergreifend ist.
    Bsp.: Aktueller Preis Produkt A : lfnr 17812 vorheriger Preis Produkt A: lfnr 13213 (das hatte ich so vergessen zu erwähnen)
    (@alle die gleich wieder über das Design meckern, ICH hab's nicht erfunden!)

    2. wofür ist ifnull(überhaubt) und, wenn ich richtig rate, wofür der der erste ifnull ?
    einen aktuellen Preis find ich doch immer, da die Basis ja die Preistabelle und nicht der Produktstamm ist.

    Bitte nochmal helfen
    danke
    ILEMax

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    versuch's mal damit:
    PHP-Code:
    with a as (select ProduktMin(LfdNr
    as 
    LfdNr1
                 from MyTable
               Group By Produkt
    ),
         
    as (select x.ProduktMin(x.LfdNr)
     as 
    LfdNr2
                 from MyTable x join a On a
    .Produkt x.Produkt and x.lfdNr lfdNr1
               Group By x
    .Produkt),
         
    a1 as (Select y.Produkty.lfdNry.Preis as Preis1              from MyTable y join a on y.Produkt a.Produkt and lfdNr lfdNr1),
        
    b1 as (Select z.Produktz.lfdNrz.Preis as Preis2
                  from MyTable z join b on z
    .Produkt b.Produkt and lfdNr LfdNr2)
    select a1.ProduktPreis1Preis2
    from a1 left outer join b1 using 
    (Produkt)
    Order By Produkt
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    wahrscheinlich musst Du noch MIN() in MAX() umwandeln und das > Zeichen bei der Verknüpfung umdrehen.

    Ich würde ja den Code nochmals editieren, aber ich kommen nicht mehr dran.
    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

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    425

    ja, das funzt

    Sehr geehrte Frau Hauser, liebe Birgitta
    das war genau das, was ich brauchte.
    Supi, vielen Dank

    der ILEMax

Similar Threads

  1. problem mit eigener sql function
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 26-05-06, 16:37
  2. SQL Problem
    By Lucky4712 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-05-06, 15:57
  3. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21
  4. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 18:38
  5. Problem bei ILE COBOL mit sql connect to
    By rebe in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-09-01, 13:55

Berechtigungen

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