ich komme voran, aber nur sehr schwerlich.
Hier nochmal ein weiteres Problem:
das klappt,
Code: Alles auswählen
SELECT fz.kfznr,
max(fz.tachostand) as tachostand,
max(tb.tankdatum) tankdatum,
hs.bez AS hersteller,
fz.datumez,
fza.bez AS Fahrzeugart
FROM fahrzeuge fz
LEFT JOIN hersteller hs ON hs.id=fz.idherstell
LEFT JOIN fahrzeugarten fza ON fza.id=idaufbau
LEFT JOIN tankbuch tb ON tb.kfznr=fz.kfznr
WHERE fz.aktiv = true
GROUP BY fz.kfznr, hersteller, fz.datumez, fahrzeugart
ORDER BY fz.kfznr
aber eigentlich müßte ich es so haben.
Die Spalte tb.menge muß angezeigt werden.
Code: Alles auswählen
SELECT fz.kfznr,
max(fz.tachostand) as tachostand,
max(tb.tankdatum) tankdatum,
tb.menge,
hs.bez AS hersteller,
fz.datumez,
fza.bez AS Fahrzeugart
FROM fahrzeuge fz
LEFT JOIN hersteller hs ON hs.id=fz.idherstell
LEFT JOIN fahrzeugarten fza ON fza.id=idaufbau
LEFT JOIN tankbuch tb ON tb.kfznr=fz.kfznr
WHERE fz.aktiv = true
GROUP BY fz.kfznr, hersteller, fz.datumez, fahrzeugart
ORDER BY fz.kfznr
Aber das scheitert.
EDIT:
Es ist ja so, das bei "Group by" folgendes passiert. In meinem Fall sind die Inhalte aus dem Fahrzeug fz. Die sind ja bei jeder KfzNr gleich also werden die in Group by eingetragen. So weit habe ich das verstanden. Jetzt werden alle kfznr zusammengefaßt. Dann werden die Zeilen, die zu jeder kfznr passen mit max() (tachostand, tankdatum) ermittelt und die maximalen Werte aus jeder Spalte werden dann in eine neue Zeile geschrieben, die das Ergbnis darstellt. Was als Folge hat, das die ermittelten Ergebnisse nicht aus einer Zeilen stammen, sondern aus verschiedenen Zeilen kommen können. (Das habe ich bis gerade nicht erkannt) Wenn ich jetzt also die tb.menge haben möchte muß ich natürlich dem Server klarmachen welche ich möchte. Ich möchte jeweils die Menge haben aus der Zeile, in der auch das jüngste Tankdatum steht. Im besten Fall also aus dem letzten Eintrag zu der Gruppe, oder je nach Sortierung aus dem ersten Eintrag der Gruppe. Aber wie mache ich das dem SQl Server klar?
Es müßte dann eigentlich so aussehen:
Code: Alles auswählen
SELECT fz.kfznr,
fz.tachostand,
max(tb.tankdatum) tankdatum,
tb.menge,
hs.bez AS hersteller,
fz.datumez,
fza.bez AS Fahrzeugart
FROM fahrzeuge fz
LEFT JOIN hersteller hs ON hs.id=fz.idherstell
LEFT JOIN fahrzeugarten fza ON fza.id=idaufbau
LEFT JOIN tankbuch tb ON tb.kfznr=fz.kfznr
WHERE fz.aktiv = true
GROUP BY fz.kfznr, hersteller, fz.datumez, fahrzeugart
ORDER BY fz.kfznr
gibt aber dann Probleme, weil der Server ja gar nicht weiß, welchen Wert er da nehmen sol für die Spalten, die nicht in Group By stehen.
Kann man da was mit HAVING machen?