[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    905

    SQL mit zwei Max Datum

    Hallo Forum,

    Ich möchte eine View mit dem aktuellsten Verkaufspreis und Einkaufspreis. Beide Preise sind in Tabellen mit einem gültig ab Datum gespeichert. Eine Verkaufspreisliste bring ich schon zustande, nur wenn sie kombiniert werden soll, da hakt es.

    meine SQL-Definition:
    Code:
    with x as (select itemno,  max(valdat) maxdat from mylib.salespric group by itemno
    order by itemno)
    
    
    select x.itemno as "Artikelnummer", 
           char(date(timestamp((a.valdat + 19000000) concat'000000')),eur) as "ab Datum", 
           currency as "Währung", 
           price as "Verkaufspreis"
       from x join mylib.salespric a on x.itemno =  a.itemno and MaxDat = a.valdat
    Für einen kleinen Anschubser sag ich schon mal Danke.
    kf

  2. #2
    Registriert seit
    Nov 2009
    Beiträge
    208
    ungefär so?
    Code:
    with a as (select item, max(dat) as dat 
                 from VKfile
                group by item),
         b as (select item, dat, price 
                 from a, VKfile 
                where a.item=VKfile.item and a.dat=VKfile.dat), 
         c as (select item, max(dat) as dat 
                 from EKfile
                group by item),
         d as (select item, dat, price 
                 from a, EKfile 
                where a.item=EKfile.item and a.dat=EKfile.dat)
    select item, b.price als VKP, d.price as EKP 
      from b, d
     where b.item = d.item
      
    
    Wenn ich Sie richtig verstanden habe.

    in B und D steht je Item der letzte Wert. Nur wenn Preise im voraus erfasst werden sind noch Anpassungen nötig.

    DiBe

  3. #3
    Registriert seit
    Jan 2007
    Beiträge
    905
    Sieht gut aus, ich versuchs mal.
    Danke
    kf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wie bereits in einem anderem Thread mitgeteilt, lässt sich dies mittels Lateral sehr leicht lösen.
    Meist hat man ja ein "Gültig Ab" oder "Gültig Bis".

    Folglich gibts 2 Varianten:

    Code:
    select a.menge, b.preis, a.PreisDatum
     from AuftragsPosition a
    cross join lateral (
      select Preis from PreisTabelle b
       where a.Artikel = b.Artikel and a.Preisdatum >= b.GueltigAb
        order by Artikel, GueltigAb asc
        fetch first 1 rows only
    ) b
    
    select a.menge, b.preis, a.PreisDatum
     from AuftragsPosition a
    cross join lateral (
      select Preis from PreisTabelle b
       where a.Artikel = b.Artikel and a.Preisdatum <= b.GueltigBis
        order by Artikel, GueltigBis desc
        fetch first 1 rows only
    ) b
    Theoretisch könnte man auch 2 Cross-Joins zusammen verwenden und per coalesce(b1.Preis, b2.Preis) prüfen:
    Wenn kein aktueller Preis (b1) dann nimm den letzten vorhandenen Preis (b2).
    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

Similar Threads

  1. Barcode mit zwei Werten
    By marcus2610 in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 13-05-20, 10:20
  2. Zwei Dateien im IFS lesen
    By Hubert in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 07-06-17, 12:22
  3. SQL über zwei Partitions
    By Rainer Ross in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 27-02-17, 17:16
  4. RSTOBJ von zwei Bändern
    By MB in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 16-05-03, 12:26
  5. Datenbank auf zwei Systemen
    By KB in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 16-05-01, 10:30

Berechtigungen

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