MySQL Nur bestimmte Datensätze verbinden

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 :wink:

hi,
eine detailfrage…
ändern sich die Preise so oft?
ich weiß nicht genau auf was du hinaus willst, aber ich denke es ist dem hier ähnlich:
http://stackoverflow.com/questions/1813580/mysql-wor…
(einfach die Bewohner mit dem timestamp tauschen)

lg
Wulff

Hi Wulff,
ich danke dir für deine Antwort. Ich habe jetzt der Tabelle Posten einen Fremdschlüssel zur Tabelle Verlauf angefügt - einfach nicht drauf gekommen :smiley:

Jetzt können sich die Preise so oft ändern wie die Anwender das gerne hätten.

Hätte mehr auf mein Datenbankdiagramm schauen sollen, dann wäre mir das früher aufgefallen.

Ohne den Fremdschlüssel konnte ich natürlich nur schwierig den richtigen Preis rausfinden.

Hallo Friendly,

Du meinst einen Join?

select tauftrag.anlagedatum, tauftragu1.bezeichnung1 from tauftrag
inner join tauftragu1 on tauftrag.id=tauftragu1.AuftragID
where tauftrag.anlagedatum >= ‚2007-01-01‘;

Gruß
Michael