SELECT Abfrage - kompliziert?

qazeem

Grünschnabel
Das folgende Problem sollte nicht so schwer sein, für Leute die fit sind. Ich bin es jedenfalls zur Zeit nicht mehr.

2 Tabellen

Fahrzeug Tabelle

Fahrzeug KZ FZ_ID
------------------------------------
B-123 1
M-567 2

Event Tabelle ( Wo die Fahrzeuge wann waren)

FZ_ID Zeit Ort
---------------------------------------------------------
1 12:00 Berlin
1 13:00 Mannheim
2 8:00 Berlin
2 10:00 Berlin
2 15:00 Hamburg

Jetzt will ich ein Select Abfrage, die mir folgendes Ergebnis bringt:

Fahrzeug_KZ Ort
--------------------------------------------------
B-123 Hamburg
M-567 Mannheim

Also das Ergebnis soll mir die Fahrzeuge auflisten mit dem der dazugehörigen Maximalen Zeit.

Muss ich dafür ein Group BY Befehl verwenden? oder SELECT MAX...?
 
Hallo,

Tip: Ist immer gut zu wissen welches Datenbanksystem du nutzt (MySQL, Oracle etc. (auch die Versionsnummer ist nicht uninteressant)
IIn Oracle (und wahrscheinlich auch in allen Anderen System) sollte das so gehen:

PHP:
select Fahrzeug_KZ , max(Zeit), Ort
from Event 
join  Fahrzeug using (FZ_ID)
group by Fahrzeug_KZ, Ort

Grüße
 
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near ','.

Tja, ich benutze SQL, die neue Version und bearbeite das mi Microsoft SQL Management Studio Express.

Ausserdem frag ich mich, da gibt es doch gar kein where klausel. Ich dachte an sowas:

PHP:
select Fahrzeug_KZ, MAX(Zeit), Ort
from Event, Fahrzeug
where Fahrzeug.FZ_ID = Event.FZ_ID
group by Fahrzeug_KZ, Ort

Das zeigt keine Fehler an. Ich bekomme allerdings nicht nur 2 Einträge, sondern Mehrere Fahrzeuge mit mehrern Orten.....
 
Hi matdacat,

klar das Ergebnis hatte ich vertauscht. Ich will natürlich das Fahrzeug mit dem aktuellsten Ort. 2 Zeilen also.
 
PHP:
select Fahrzeug_KZ, MAX(Zeit), Ort
from Event, Fahrzeug
where Fahrzeug.FZ_ID = Event.FZ_ID
group by Fahrzeug_KZ, Ort

Die Gruppierung nach dem Ort ist nicht korrekt. Ohne 'Ort' müssts schon klappen. Und bzgl. des Fahrzeugs möchtest Du doch nach FZ_ID gruppieren (auch wenn Fahrzeug_KZ ebenfalls eindeutig sein müsste), oder ?
 
Zuletzt bearbeitet:
PHP:
Msg 8120, Level 16, State 1, Line 1
Column 'Fahrzeug.Ort' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Dann bekomm ich diesen Fehler....
 
natürlich 'Event.Ort' und nicht Fahrzeug.Ort...

Ich habe eine größere Tabelle. Die Idee mit dem Fahrzeug und Event ist allerdings identisch und vereinfacht.
 
Sorry fürs Verwirrung stiften. Eine Möglichkeit ist die folgende:

Code:
SELECT F1.KZ,  E1.Zeit, E1.Ort
FROM Event AS E1 INNER JOIN  Fahrzeug AS F1 ON E1.FZ_ID = F1.FZ_ID
WHERE E1.Zeit = (SELECT MAX(Zeit) FROM Event WHERE Event.FZ_ID=F1.FZ_ID)
 
Zurück