Rolf B: mySQL: Satz mit dem minimalen Wert

Beitrag lesen

Hallo Linuchs,

das macht man mittels eines Join des GROUP BY Ergebnisses mit der GROUP BY Quelle. Mit einer einzigen Table sieht das grundsätzlich so aus:

SELECT a.key, a.value, a.col1, a.col2, a.col3, ...
FROM table a JOIN (SELECT key, MIN(value) FROM table GROUP BY key) b 
               ON a.key=b.key AND a.value=b.value

Deine Ausgangstabelle in ein JOIN-Ergebnis, d.h. du musst überall da, wo table steht, deinen JOIN eintragen.

Da ich keine Ahnung habe, wie deine Query aussieht, unterstelle ich mal einfach die folgende Ausgangsquery. Deine wird anders aussehen, aber das macht nichts, es geht ja um's Prinzip.

SELECT ort1.land_kz, min(trm1.tag)
FROM Orte as ort1 JOIN termine as trm1 ON trm1.ortid=ort1.ortid
GROUP BY ort1.land_kz

Darauf wenden wir nun das oben gezeigte Pattern an, und erhalten:

SELECT ort2.ort_id, ort2.land_kz, ort2.dings, ort2.bums,
       trm2.tag, trm2.foo, trm2.bar, trm2.baz
FROM orte as ort2 
     JOIN termine as trm2 ON ort2.ortid=ort2.ortid
     JOIN (SELECT ort1.land_kz, MIN(trm1.tag) as min_tag
           FROM Orte as ort1 
                JOIN termine as trm1 ON trm1.ortid=ort1.ortid
           GROUP BY ort1.land_kz) key
       ON key.land_kz = ort2.land_kz AND key.min_tag = trm2.tag

Das liest sich scheußlich, ist aber leider so. Du kannst die Lesbarkeit leicht steigern wenn du den JOIN von Terminen und Orten als VIEW definierst, aber ob es das wirklich besser macht... Keine Ahnung.

Rolf

--
sumpsi - posui - clusi