Hallo zusammen,
ich habe folgende Tabellen (auf’s nötigste vereinfacht), aus denen ich Datensätze verbinden möchte:
Artikel: id (PK)
Verlauf: id (PK), artikel_id (FK), t_stamp (TIMESTAMP)
Beleg: id (PK), datum (TIMESTAMP)
Posten: artikel_id (FK/PK), beleg_id (FK/PK)
Das ganze ist eine Datenbank für ein Kassensystem.
In der Tabelle sollen die Artikel eingepflegt werden, die zum Verkauf stehen.
Im Verlauf sollen die Preis- und Mengenentwicklungen gespeichert werden.
In der Tabelle „Beleg“ soll für einen Verkauf von Artikeln das Datum gespeichert werden.
In der Tabelle „Posten“ sollen die Posten zu den einzelnen Belegen gespeichert werden.
Nun möchte ich eine Abfrage formulieren in der die Datensätze so verbunden werden, dass ersichtlich ist welche Artikel, an welchem Tag verkauft wurde - kein Problem.
Und ich möchte, dass die einzelnen „Posten“ immer mit dem Datensatz aus „Verlauf“ verbunden werden, der den nächst kleineren Wert in „verlauf.t_stamp“ gegenüber dem dazugehörigen „beleg.datum“ aufweist.
Hier ist mein Problem, dass ich es nur hin bekomme, dass die „Posten“ mit dem nächst kleineren Wert gegenüber dem absolut höchsten Wert in „beleg.datum“ verbunden werden.
Hier ist meine Abfrage:
SELECT a.* , v.* , p.* , b.*
FROM artikel a , verlauf v , posten p , beleg b
WHERE a.id = v.artikel_id AND v.artikel_id = p.artikel_id AND p.beleg_id = b.id
Nun ist die Frage wie ich das Ergebnis so eingrenzen kann, dass immer nur der Datensatz mit dem dazugehörigen, gleichen oder nächst kleineren verlauf.t_stamp gegenüber beleg.datum angezeigt wird.
Ich hoffe ich habe mich deutlich ausgedrückt