Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Auftrag mit letztem Datum finden

Begonnen von d.rodel, Juli 07, 2017, 12:02:06

⏪ vorheriges - nächstes ⏩

d.rodel

Hallo

Ich habe folgende Aufgabenstellung die ich nicht lösen kann:

zwei Tabellen:   siehe Bilder




Tabelle: dataang
¦ angnr ¦¦ datumanl ¦


Tabelle: dataangp
¦ angnr ¦¦ artnr ¦¦ pep ¦


Ich sollte jetzt pro Artikelnummer (artnr) den Preis (pep) des letzen Auftrages herausfingen,
jeweils aber nur einen! Die Verbindung kann über die Auftragsnummer (angnr) gemacht werden.
in der dataangp kann die angnr mehrfach (pro Position des Auftrages) vorkommen.

Besten Dank für eure Hilfe

Gruss Dani

Lachtaube

Hätte die zweite Tabelle auch ein Datumsfeld, so ließe sich leicht das letzte Angebot zu einem Datum herausfinden - mit der gezeigten Datenform lässt sich das Problem IMHO nicht sauber lösen.
Grüße von der (⌒▽⌒)

d.rodel

Hallo Lachtaube

Danke für die Antwort.
Leider hat es in der Tabelle dataangp kein Datum.

Gruss Dani

PhilS

Zitat von: d.rodel am Juli 07, 2017, 15:46:10Leider hat es in der Tabelle dataangp kein Datum.
Darin sehe ich kein Problem. Die beiden Tabellen lassen sich doch in einer Abfrage über die angnr problemlos miteinander verknüpfen.

Auf meiner Webseite habe ich übrigens einen ausführlichen Text zum Thema Abfrage/Darstellung 1:N-Daten sogar mit einem Tutorial-Video dazu. Sogar das dort gewählte Beispiel ist der konkreten Frage hier recht nah.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lachtaube

@Phil,

und welcher pnp soll dann bei mehreren zur Verfügung stehender Preise zur Geltung kommen?
Grüße von der (⌒▽⌒)

DF6GL

Hallo,

vermutlich meint der TS es "andersherum":

Zitatpro Artikelnummer (artnr) den Preis (pep) des letzten (jüngsten) Auftrages    herausfinden

PhilS

Zitat von: Lachtaube am Juli 07, 2017, 20:04:14@Phil,
und welcher pnp soll dann bei mehreren zur Verfügung stehender Preise zur Geltung kommen?
Jeweils nur einer! ;-)
Welcher genau, muss derjenige entscheiden, der die Anforderungen definiert hat.
Für mich wäre es das Naheliegendste mit AVG() den Durchschnitt zu ermitteln, aber auch MIN() oder MAX() könnten fachlich Sinn machen, wenn es kein anderes Kriterium gibt, den "richtigen" Preis zu ermitteln.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

d.rodel

Hallo

Danke für die Antworten.

Ich hab's mal nach der Anleitung versucht hat aber nicht ganz geklappt, ich habe immer noch pro Artikel mehrere Preise.
Hier die Abfrage die ich erstellt habe:

Select dataangp.artnr,dataangp.angnr, dataangp.pep, klb.datumanl
from dataangp
inner join dataang on dataangp.angnr = dataang.angnr
inner join  (select dataang.*   
from dataang   
inner join   
(select dataang.angnr, max(dataang.datumanl) as maxdatum   
from dataang   
group by dataang.angnr) as b
on dataang.angnr = b.angnr and dataang.datumanl = b.maxdatum) as klb   
on dataangp.angnr = klb.angnr
inner join dataas on dataas.artnr = dataangp.artnr
where klb.datumanl > '01.01.2015' and dataas.chschl = 'F'
group by dataangp.angnr, dataangp.artnr, dataangp.pep, klb.datumanl
order by dataangp.artnr


und das Ergebnis:


Gruss Dani



PhilS

Zitat von: d.rodel am Juli 10, 2017, 08:42:12Ich hab's mal nach der Anleitung versucht hat aber nicht ganz geklappt, ich habe immer noch pro Artikel mehrere Preise.
Grundsätzlich sieht das gut aus.
Du hast mit dem Sachverhalt der mehrfachen Preise pro Artikel und Angebot eine Situation, die sich ohne weitere Informationen nicht sauber lösen lässt.
Welche Preis soll den angezeigt werden, wenn es nur einer sein darf?
Mit den bisherigen Informationen bleibt nur die Möglichkeit mit Aggregatfunktionen entweder den niedrigsten (MIN), den höchsten (MAX) oder den Durchschnittspreis (AVG) pro Angebot zu ermitteln.
Hier für AVG:
Select dataangp.artnr,dataangp.angnr, AVG(dataangp.pep) AS Durchschnittspreis, klb.datumanl
...

Die Spalte dataangp.pep lässt du dann aus dem GROUP BY raus.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

d.rodel

Hallo

Danke vielmals, hab's mit leichten Aenderungen so hingekriegt dass ich es verwenden kann.
Hier der definitive Code:

Select dataangp.artnr, (max(dataangp.pep*datawae.ufaktor*((100-dataas.umrechf)/100)* (100-dataangp.rab1)/100)) as maxpreis
from dataangp
inner join dataang on dataangp.angnr = dataang.angnr
inner join  (select dataang.*   
from dataang   
inner join   
(select dataang.angnr, max(dataang.datumanl) as maxdatum   
from dataang   
group by dataang.angnr) as b
on dataang.angnr = b.angnr and dataang.datumanl = b.maxdatum
where dataang.aufkenn = 1) as klb
on dataangp.angnr = klb.angnr
inner join dataas on dataas.artnr = dataangp.artnr
inner join dataaszus on dataaszus.artnr = dataas.artnr
inner join datawae on dataang.waenr = datawae.waenr
where klb.datumanl > '01.01.2015' and (dataas.chschl = 'F' or
dataaszus.beistellzeit > 0)
group by dataangp.artnr
order by dataangp.artnr


Besten Dank.

Gruss Dani