Hi Rolf,
m.RechnungenID = (SELECT MAX(tmp.RechnungenID) FROM _table_mahnungen tmp WHERE tmp.RechnungenID = r.RechnungenID AND m.aktiv = 1)
Ein Auswählen der höchsten Mahnstufe erkenne ich da nicht.
Stimmt, müsste heißen??:
m.RechnungenID = (SELECT tmp.RechnungenID
FROM _table_mahnungen tmp
WHERE tmp.RechnungenID = r.RechnungenID AND m.aktiv = 1 AND Mahnstatus = SELECT MAX(tmp.Mahnstatus) WHERE tmp.RechnungenID = r.RechnungenID)
Bitte nicht... bin grad etwas verwirrt. 😕
Der Subselect wählt nur die Sätze aus, wo tmp.RechnungenID = r.RechnungenID ist. D.h. in den ausgewählten Mahnungszeilen sind die Werte für tmp.RechnungenID alle gleich, und zwar alle gleich
r.RechnungenID
. Davon ein Maximum zu bilden und damit zu vergleichen ist zwecklos.
Ja, das sehe ich ein.
Statt RechnungenID müsstest Du den maximalen Mahnstatus finden und damit vergleichen.
Ja.
Mir ist aber was aufgefallen - prüf mal, ob deine Query noch sinnvolle Ergebnisse liefert. Ich habe nämlich übersehen, dass deine Relationen über die RechnungenID gebilet werden, der GROUP BY aber über RechnungenNummer. So richtig sinnvoll ist das wohl nur, wenn es zu einer RechnungenNummer mehrere RechnungenID gibt, und dann ist der SUM als Subselect wohl nicht zielführend. Deine ursprüngliche Query hat ja die Bruttozahlungen über alle Zahlungseingänge einer Rechnungsnummer gebildet, und nur eine Zeile pro Nummer geliefert. Ohne den GROUP BY RechnungenNummer liefert sie eine Zeile pro RechnungenID. Oder auch mehrere, wenn einer der LEFT JOINs mehr als eine Zeile liefert.
Wie man damit richtig umgeht, hängt von deinen Daten ab. Kannst Du sagen, wieviele Zeilen jeder LEFT JOIN maximal liefern kann? Wie stehen RechnungenNummer und RechnungenID zueinander in Beziehung, ist das 1:1, 1:N oder N:1? Ein M:N will ich jetzt mal ausschließen...
1:1 RechnungenID und RechnungsNummer sind beide unique und 1: 1 zugeordnet.
Prüfe dann noch, ob Du den DISTINCT in der ersten Zeile brauchst. Der kostet auf jeden Fall auch Zeit, und er war möglicherweise nur deshalb nötig, weil Du die Berechnungen-Tabelle unnötigerweise hinzugemischt hattest.
Mach ich.
Jörg