Hallo,
Dein Problem scheint mir analog zu dem in diesem Archivthread zu sein.
Du versuchst Dich an der von mir (dort mit einem View statt der temporären Tabelle) vorgestellten Lösung, bei geeigneter Unterstützung durch das DBMS, das Du uns geflissentlich verschweigst, würde ich Iljas Lösung bevorzugen.
Die Tatsache, dass es bei Dir drei Tabellen gibt, ändert das Problem nicht grundlegend, ein JOIN oder zwei mehr.
Dein SQL-Code ist fehlerhaft:
> CREATE TEMPORARY TABLE
> tmp
> SELECT
> kunden_nr, vertrags_nr, MAX( eintragung ) as last
> FROM
> rechnung
> GROUP BY vertrags_nr;
es fehlt die Gruppierung nach kunden_nr.
Hier kommt das gewünschte Ergebnis raus.
Das erhöht die Wahrscheinlichkeit, dass Du MySQL verwendest. Ich kenne halt kein anderes DBMS, das diesen fehlerhaften Code schluckt.
Nun möchte ich in einer zweiten Abfrage die Datensätze in der Temporären Tabelle mit den zugehörigen Werten aus den drei Tabellen kunden, vertrag und rechnung auffüllen.
Wenn ich Dich richtig verstanden habe, dann hättest Du gern zu jedem Vertrag die neueste Rechnung mit Rechnungsdetails, ein paar Vertragsdetails und ein paar Kundendetails. Richtig?
SELECT
s.firma,
s.kunden_nr,
/* weitere Details aus s */
v.preis,
/* weitere Detais aus v */
r.kunden_nr,
r.vertrags_nr,
r.rechnungs_nr,
r.abrechnung
FROM
rechnung as r
INNER JOIN vertrag as v ON r.vertrags_nr = v.vertrags_nr
INNER JOIN stamm as s ON v.kunden_nr = s.kunden_nr
liefert Dir alle Details zu allen Rechnungen aller Verträge aller Kunden. Auf diese Ausgangsbasis kannst Du analog die Lösungen in oben angeführtem Thread anwenden.
PS: Die Spalte kunden_nr in der Tabelle rechnung ist redundant. Deswegen solltest Du diese Spalte dort weglassen. Selbstverständlich musst Du in diesem Fall bei Deiner Abfrage die kunden_nr aus der Tabelle vertrag auslesen.
Freundliche Grüße
Vinzenz