Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

schnellste Technik um gültigen Einkaufspreis zu ermitteln

Begonnen von berndi, Dezember 10, 2012, 10:01:39

⏪ vorheriges - nächstes ⏩

berndi

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

Wurliwurm

#1
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.

berndi

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

DF6GL

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


berndi

Hallo Franz,

vielen Dank für den Tipp, wieso gruppierst Du nach Datum und nicht nach Artikel?

viele Grüße

Bernd

berndi

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

berndi

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 ???

DF6GL

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...

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

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.
Gruß Klaus