Hallo Zusammen,
leider bin ich ein wenig eingerostet (habe schon lange nicht mehr programmiert) und suche einen Weg wie ich aus einer Tabelle "Lieferanteneinkaufpreise" am schnellsten den
a) gültigen
b) günstigsten
Lieferanten-Artikel-Preis herausfinde.
Die Tabelle hat folgende Felder:
LieferantenNummer
GültigAbDatum
ArtikelID
Artikelpreis
Es können für einen Artikel von mehreren Lieferanten Preise eingetragen sein. Ausserdem hat jeder Lieferant mehrere Preise pro Artikel verzeichnet, da es natürlich schon Preiserhöhungen gab. D.h. diese unterscheiden sich über das "gültigAbDatum" z.b.
Lieferantennummer GültigAbDatum ArtikelID Artikelpreis
100 01.01.2012 1 1,00
100 08.09.2012 1 1,10
100 01.01.2013 1 0,95
101 01.12.2012 1 1,05
der gültige Lieferant wäre heute die 101 mit dem Preis von 1,05
Wie wäre grob die Vorgehensweise? Kann ich mit SQL arbeiten (ich habe ja leider kein Enddatum) oder muss ich Satz für Satz
durchgehen und immer wieder Recordsets bilden???
Wäre froh um einen Tipp. Erwarte keinen fertigen Code
herzlichen Dank
Bernd
Zitat von: berndi am Dezember 10, 2012, 10:01:39
Wie wäre grob die Vorgehensweise? Kann ich mit SQL arbeiten (ich habe ja leider kein Enddatum) oder muss ich Satz für Satz
durchgehen und immer wieder Recordsets bilden???
Das geht auf den ersten Blick mit SQL. Bedingung WHERE muß den Gültigkeitszeitraum enthalten, so daß nur Einträge kommen, welche im Zeitraum sind (=<heute) Außerdem muß die Abfrage sortiert sein nach dem Preis. Außerdem braucht es noch eine Bedingung, daß nur maximal ein Satz ausgegeben wird.
ich habe einen Teil der Lösung gefunden. Ich übertrag alle Datensätze die nicht in der Zukunft liegen in eine temporäre Tabelle. Dort gruppiere ich alle Lieferanten und nehme den Wert mit dem Datum-Max-Wert (neuestes Datum) und schreibe das wiederum in eine Tabelle.
Mein Problem ist jetzt aber folgendes:
Wenn ich eine Abfrage mache die z.B. nach der Artikelnummer und Lieferanten gruppiert und das Datum auf Max stelle, was gebe ich dann bei den anderen Feldern an die ich brauche wie Preis, Erfassung usw.
Ich habe probiert dort "erster Wert" anzugeben. Leider wirft er mir dann aber die Felder in den Sätzen durcheinander.
Ich weiß, es ist schlecht erklärt aber ich weiß nicht wie ich es besser erklären kann. Hoffentlich versteht mich jemand ;O)
Bernd
Hallo,
Ansatz:
SELECT First(Liefnr) AS Lief_Nr, First(Preis) AS akt_Preis
FROM Tabelle
WHERE AID=1
GROUP BY GD
HAVING GD<=#12/1/2012#
ORDER BY GD DESC
Hallo Franz,
vielen Dank für den Tipp, wieso gruppierst Du nach Datum und nicht nach Artikel?
viele Grüße
Bernd
Hallo Franz,
wenn ich es ein wenig abwandle (group by AID) bekomme ich das richtige Ergebnis. Wie bekomme ich jetzt allerdings noch die restlichen Felder in den Datensatz????
Das selbe Problem beschreibe ich schon in der Rubrik Abfragen.
Geht das denn vielleicht gar nicht? Wie kann ich das dann lösen? Ich benötige alle Felder.
wäre nett, wenn Du mir noch mal helfen könntest.
vielen Dank
Bernd
Hallo Franz,
vielleicht nochmals anderst erklärt:
Wenn ich die gruppierung weglasse, kommt der gesuchte Satz ganz am Anfang der Tabelle. Diesen möchte ich dann an eine andere Tabelle anfügen.
Mit der Gruppierung erhalte ich entweder nicht alle Felder oder ein falsches Ergebnis oder gar ein Mischung aus mehreren Sätzen ???
Hallo,
Du solltest erzählen, was insgesamt gemacht werden soll . Von "allen" Feldern hast Du nicht gesprochen, nur vom günstigsten gültigen Preis eines bestimmten Artikels...
SELECT *
FROM DeineTabelle T
WHERE T.ArtikelID IN
(SELECT TOP 1 U.ArtikelID
FROM DeineTabelle U
WHERE U.GültigAbDatum <= Date()
AND U.GültigAbDatum = T.GültigAbDatum
ORDER BY U.GültigAbDatum DESC, U.ArtikelID)
MfGA
ebs
Hallo,
es ist kein guter Stil, ein Thema nicht zu beantworten und einfach ein Neues zu beginnen. Oft rächt sich das, indem beide Themen dann ignoriert werden.