Vinzenz Mai: MySQL: Die Zeile mit dem kleinsten Wert

Beitrag lesen

Hallo Kalle,

SELECT
min(concat(ter1.tag, ter1.uhr)) tag_uhr
,ter1.*
,DATE_FORMAT(ter1.tag,'%w') wotag
,ort1.plz                   ort_plz
,ort1.name                  ort_name
,ort1.name_zusatz           ort_name_zusatz
FROM       bia_termine AS ter1
LEFT JOIN (bia_orte    AS ort1)
ON        (ort1.id = ter1.ort_id)
WHERE     ter1.owner_id = 1
AND       ter1.intern_kz = 0
#AND       ter1.bild_url > ''
GROUP BY  ter1.ort_id

typischer Anfängerfehler (ich weiß, dass Du eigentlich keiner bist),
der nur unter MySQL nicht zu einer Fehlermeldung führt.
Es ist nach jeder Spalte, für die keine Aggregatsfunktion verwendet wird,
zu gruppieren, weil ...

ORDER BY  tag_uhr
LIMIT 0,8

Das Ergebnis liefert mir zwar die kleinsten tag_uhr und jeden Ort nur einmal, aber die Zeile dazu (ter1.*) stimmt nur zufällig.

alle Werte in den anderen Spalten unvorhersagbar sind (wenn die Werte nicht gleich sind) - so steht es auch im Handbuch.

Die Lösung heißt korrelierte Unterabfrage, siehe z.B. dieses Archivposting von mir.

Freundliche Grüße

Vinzenz