dedlfix: MySQL: Ganzen Satz finden zu MIN( tag )

Beitrag lesen

Tach!

Klassische Lösung: Self-Join vom GROUP-Konstrukt mit der Tabelle:

SELECT trm1.min_tag_uhr, trm2.ort
FROM (SELECT adress_id, MIN( CONCAT( tag, ' ', uhr )) AS min_tag_uhr
      FROM termine
      GROUP BY adress_id) trm1
  JOIN termine trm2 
   ON trm1.adress_id = trm2.adress_id 
  AND trm1.min_tag_uhr = CONCAT(trm2.tag, ' ', trm2.uhr)

Dedlfix würde den Selfjoin vermutlich sofort durch einen Subselect ersetzen. Ich glaube, das sähe dann so aus (ungetestet):

Ich würde vor allem das CONCAT() zu ersetzen versuchen. Denn solche Konstrukte, die für jeden Datensatz erst berechnet werden müssen, bevor sie ausgewertet werden können, sind Index-Killer.

SELECT trm1.min_tag_uhr, trm2.ort
FROM (SELECT adress_id, tag, uhr
      FROM termine
      GROUP BY adress_id
      ORDER BY tag, uhr
      LIMIT 1
     ) trm1
  JOIN termine trm2 
    ON trm1.adress_id = trm2.adress_id 
      AND trm1.tag = trm2.tag
      AND trm1.uhr = trm2.uhr

Inwieweit das funktioniert, kann ich nicht sagen, weil immernoch nach Spalten selektiert wird, nach denen nicht gruppiert wird, und sie so undefinierte Ergebnisse liefern.

dedlfix.