Abfrageproblem

Fanatico

Mitglied
Hallo!

Ich habe mir folgende Abfrage gevastelt.

SELECT distinct tr.`user`, wappen, team, Count(tr.`user`) AS offene, von, max(bis), grund FROM spielplan3, trainer tr, urlaub, teams WHERE gespielt = 'N' AND spieltag <=17 AND (tr.teamid = hteamid OR tr.teamid = gteamid) AND tr.`user` = urlaub.`user` AND von <=20040723 AND bis >=20040723 AND tr.teamid = teams.teamid GROUP BY tr.`user` ORDER BY tr.`user`, bis DESC


Sie funktioniert auch ganz gut, allerdings habe ich mal gestestet was passiert, wenn ein Trainer 2 aktuelle Urlaube hat.

Zum Beispiel nur einen für den 23.07 und der andere geht bis zum 23.08.

Die Daten sind im Format JJJJMMTT gespeichert.

ICh hätte jetzt gerne den Datensatz eines Users mit dem größeren Enddatum.

Der BEfehl MAX(bis) ist quatsch, denn dann wird evtl. frei zusammengesmischt.

Hoffe mir kann jemand helfen!
 
Also du willst nur den Datensatz jedes Trainers ausgegeben haben, der das späteste Urlaubsende beinhaltet?
Das müsste doch entweder so
PHP:
SELECT trainer, daten 
FROM alleTabellen 
WHERE urlaubsende=MAX(urlaubsende) 
GROUP BY trainer
oder so
PHP:
SELECT trainer, daten 
FROM trainerTabellen tT, alleAnderenTabellen 
WHERE urlaubsende=(SELECT MAX(urlaubsende) FROM urlaubsTabelle uT WHERE uT.traiener=tT.trainer)
gehen.
Die zweite Variante dürfte allerdings aufgrund des Correlated Subselects langsamer sein.

Hilft's?
 
Funktioniert beides bei meiner komplexen Abfrage nicht.

Das obere erzählt was von "Use of invalid group" und das untere ist ein Subselect, den MySQL net mag!
 
Nun die erste Version von Gorcky war ja nur ein Beispiel wenn das Feld Trainer nicht
vorhanden ist dann trag halt das ein wo die Trainer drin sind :)

Da du eine Version von Mysql hast die kein Subselect mag kommste nicht darumherum
das problem über zwei Abfragen zu lösen :)

Der Grund liegt darin das es keine Möglichkeit gibt die Reihenfolge der Datensätze die mit
Group zusammengefasst sind zu beeinflussen - leider :-(

Beispiel:
User,Gruppe,Punkte als Felder
Karl,1,4
Paul,1,6
Egon,1,2

wenn die Abfrage kommt
Select *,max(punkte) from Beispiel group by gruppe

kommt dann das raus:

Karl,1,4,6

oder anders gesagt max holt nur den maximalen wert des Feldes innerhalb der Gruppe raus und
sorgt ! nicht ! dafür das der komplette Datensatz in dem das maximum vorhanden ist ausgegeben wird.

Noch ein Hinweis
distinct und group by in einer selectabfrage zusammen ist unnötig
das distinct kann dort entfallen
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück