Antwort an „Jörg“ verfassen

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

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen