Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: d.rodel am Juli 07, 2017, 12:02:06

Titel: Auftrag mit letztem Datum finden
Beitrag von: d.rodel am Juli 07, 2017, 12:02:06
Hallo

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

zwei Tabellen:   siehe Bilder
(http://dataang.jpg)
(http://dataangp.jpg)


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
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: Lachtaube am Juli 07, 2017, 13:28:00
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.
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: d.rodel am Juli 07, 2017, 15:46:10
Hallo Lachtaube

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

Gruss Dani
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: PhilS am Juli 07, 2017, 18:39:04
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 (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=abfrage-1-zu-n-aggregatfunktion-letzter-datensatz) sogar mit einem Tutorial-Video (https://youtu.be/7ospEO8LCOw) dazu. Sogar das dort gewählte Beispiel ist der konkreten Frage hier recht nah.
Titel: Re: Auftrag mit letztem Datum finden
Beitrag 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?
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: DF6GL am Juli 08, 2017, 09:25:41
Hallo,

vermutlich meint der TS es "andersherum":

Zitatpro Artikelnummer (artnr) den Preis (pep) des letzten (jüngsten) Auftrages    herausfinden
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: PhilS am Juli 08, 2017, 20:33:12
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.
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: d.rodel am Juli 10, 2017, 08:42:12
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:
(http://ergebnis.jpg)

Gruss Dani


Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: PhilS am Juli 10, 2017, 10:48:32
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.
Titel: Re: Auftrag mit letztem Datum finden
Beitrag von: d.rodel am Juli 10, 2017, 14:12:28
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