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

Beitrag lesen

Hallo dedlfix,

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

Auch als autoincremment-Wert nicht?

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.

Ok.

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, ...).

Genau daran knabbere ich seit graumer Zeit, daher die "doppelte" Nachfrage.

Du willst also den neuesten Datensatz haben - okay, Maximalwert ermitteln. Damit hast du aber noch nicht den Datensatz

Ganz genau so ist es.

geht das erstens nur unter MySQL (weil das Tagesfeld nicht Bestandteil der Gruppierung und auch nicht aggregiert wurde - was nur MySQL zulässt,

Hatte ich auch schon erroiert, damit hätte ich leben können, weil ich mysql verwende.

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.

Und ebendies hatte ich befürchtet. Und dachte, es gäbe hier eine brauchbare Lösung für.

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.

Doch, das bringt mich ganz genau zur Lösung.
Denn dann werde ich die DB ein klein wenig umstrukturieren. Ich weiß noch nicht ganz genau, wie ich das mache, aber es gäbe einige Möglichkeiten. Ich könnte z.b. anstelle eines INSERTS ein Update nutzen. Damit hätte ich augenblicklich keine "doppelten" Datensätze mehr. Nachteil wäre, daß ich die Historie des Datensatzes verlieren würde. Aber das könnte ich anders regeln, zb. über 2 Tabellen. 1 Tabelle für den aktuellen Stand, die 2. Tabelle für die "historischen" Stände.

Das würde beim Eintragen etwas mehr Arbeit bedeuten, aber das Auslesen der Datensätze würde erheblich vereinfacht. Und da ich bei diesem Programmteil noch in den Anfängen stecke, ist es problemlos möglich, noch an der DB-Strucktur zu feilen.

Also doch geholfen, danke :-)

Kalli