Tach!
select DISTINCT
r.Rechnungsnummer,
ADDDATE(r.R_Datum , INTERVAL r.Faelligkeit DAY),
m.Mahnstatus,
ADDDATE(m.M_Datum, INTERVAL m.Faelligkeit DAY)
from rechnungen r
LEFT JOIN mahnungen m
ON r.RechnungenID = m.RechnungenID
WHERE
r.B_art="RG"GROUP BY r.RechnungsNummer HAVING max(m.ID)
> würde das Problem lösen, aber dann wird mir anscheinend nur die Rechnung mit der höchsten m.ID angezeigt.
Mit solch einer Konstruktion holst du dir unter umständen mehr Probleme an Land. Nur MySQL erlaubt, andere Felder als die im GROUP BY angegeben, zuzüglich Aggregatfunktionen (MAX(), MIN(), SUM(), etc.) zu selektieren. Das Ergebnis ist dann jedenfalls undefiniert. Es wird ein beliebiger Wert aus der Gruppe genommen. Solch eine Gruppe produziert ja immer nur eine Ergebniszeile pro Gruppen-Wert. Man kann solceh Abfragen verwenden, wenn man genau weiß, dass die Datei innerhelb der Gruppe eindeutig sind, was vor allem bei redundanten Daten der Fall ist, die man ja aber eigentlich durch Normalisierung wegoptimiert.
Das HAVING filtert auch nicht Gruppenwerte sondern kommt erst zur Anwendung, wenn die Ergebnismenge berechnet ist.
> Ich dachte, es würden so alle Rechnungsnummern je 1 mal angezeigt und falls 2 (oder mehr) Mahnstati vorhanden wären, würde der mit der höchsten ID genommen?
Die richtige Mehrzeahl von Status ist übrigens [Status](http://www.duden.de/rechtschreibung/Status) (gesprochen mit etwas langgezogenerem u).
Formulier doch erstmal, was überhaupt das Ergebnis werden soll. misterunknown hat ja schon gemutmaßt, dass der Mahnstatus irrelevant ist, weil du, egal wieviele davon existieren, nur eine Rechnung sehen willst. Du fragst ihn trotzdem ab, also muss er eine Bedeutung haben, beziehungsweise musst du eine Regel haben, was bei mehrfachen Mahnstatus passieren soll.
dedlfix.