dedlfix: Jeweils bestimmten Wert finden für Spalte

Beitrag lesen

Tach!

Selektiere als ersten Wert eindeutige IDs (distinct). Als zweiter kommt eine korrelierte Subquery zum Einsatz. Die findet eingeschränkt auf die ID aus der Hauptquery alle Datensätze, die kleiner sind als dein Datum. Absteigend sortiert und limitiert auf 1 hast du dein Davor-Datum.
Vielleicht verstehe ich es falsch... aber ich würde den Datensatz zunächst auf alle Zeilen eingrenzen, deren Datum vor dem 01.03.13 ist, und dann nach id gruppieren und den Datumseintrag wählen, das am größten ist.

Das ist ja genau die Lösung, die Erich bereits selbst gefunden hat. Und sie sieht auf den ersten Blick zielführend und einfacher als mein Gedankengang aus.

Halte _ich_ für einfacher, als hier mit korrelierten Unterabfragen zu arbeiten.

Es kann aber sein, dass er im weiteren Verlauf diese zumindest zusätzlich verwenden muss. Er hat ja angedeutet, dass dieser Teil nur einer von mehreren einer größeren Aufgabe ist. Im großen Maßstab betrachtet kann diese einfache Lösung aber auch hinderlich wirken und ein anderer Lösungsweg als geeigneter erscheinen.

GROUP BY hat ja den Nachteil, dass es unter MySQL nicht unbedingt eine saubere Lösung ist und unter anderen DBMSen gar nicht erst gestattet ist, weitere Felder in die Abfrage mit aufzunehmen. Dann kann die Ermittlung des Datumswertes in eine Subquery ausgelagert werden, ohne dass man in eine "Gefahrenzone" gerät.

SELECT id, irgendwelche felder, (SELECT MAX(datum) FROM t2 WHERE datum < '2013-03-01' AND t2.id = t1.id) maxdatum FROM t1 ...

dedlfix.