dedlfix: mysql: Neue Frage im alten Thema zur Vermeidung eines Doppelpost

Beitrag lesen

Tach!

Was ist, wenn in der Tabelle 2, also dem ersten Teil meiner IFNULL-Frage mehr als 1 Eintrag steht und ich hier den neueren Eintrag samt seiner "Tage-Spalte" brauche? Neuer meint, daß z.b. das Datum jünger ist oder auch die ID des Eintrages höher ist.

Die ID ist normalerweise kein Sortierkriterium, weil die nicht garantiert aufsteigend vergeben wird. Die solltest du üblicherweise aus solchen Neuer-Älter-Betrachtungen herauslassen.

Kann man das noch mit hier herein bringen oder muß ich dieses Problem dann ganz anders angehen?

Das ist der zweite Schritt. Der erst wäre, zunächst einmal eine Query zu formulieren, die die gewünschten Datensätze selektiert. Dass diese dann in die andere zu integrieren ist, muss man lediglich im Hinterkopf behalten, damit man keine unpassenden Lösungen im ersten Schritt erzeugt.

Das Problem jedenfalls ist, dass du mehr als einen Wert benötigst. Ein einzelner ließe sich sehr gut in einer correlated subquery ermitteln. Mehrere müssen in einer Ergebnismenge gesammelt und gejoint werden. Und hier wiederum ist es nicht so einfach möglich, Gruppen zu bilden und aus dieser Gruppe Werte aus einen Datensatz zu bekommen und nicht nur ein Aggregat-Ergebnis (Summe, Maximalwert, ...).

Du willst also den neuesten Datensatz haben - okay, Maximalwert ermitteln. Damit hast du aber noch nicht den Datensatz (oder in deinem Fall das Tagesfeld), sondern nur ebendiesen Maximalwert. Und der kann auch in mehreren Datensätzen der Gruppe vorkommen. LIMIT gibt es nicht innerhalb einer Gruppierung und wenn du auf das Tagesfeld zugreifst, geht das erstens nur unter MySQL (weil das Tagesfeld nicht Bestandteil der Gruppierung und auch nicht aggregiert wurde - was nur MySQL zulässt, anderswo aber als Fehler angesehen wird) und zweitens gibt MySQL nur einen beliebigen Wert aus der Gruppe und nicht unbedingt einen zum Maximalwert-Datensatz gehörigen Wert aus. Dieser Weg ist also üblicherweise unbrauchbar.

Vielleicht gibt es einen Trick 17, der mir grad nicht geläufig ist (vielleicht irgendwas mit Self-Join). Das waren jedenfalls viele Wörter, nur um zu sagen wie es nicht geht, was dich auch nicht näher zur Lösung bringt, aber hier muss ich erstmal passen.

dedlfix.