Hallo liebe bplacer,
ich suche eine optimale(re) Lösung für folg. Problem, da ich etwas aus der Übung bin:
Ich habe eine Tabelle in der datum, refid, wert gespeichert werden.
Ich möchte nun eine Auswahl erzeugen, die für alle refid den Datensatz mit dem kleinsten Datum ab einer bestimmten Datumsgrenze zeigt. Klingt einfach, ist es aber nicht. Mein erster Ansatz:
Select * from tabelle t1 where datum =(SELECT MIN(datum) FROM tabelle t2 where datum > ‘.$datumgrenze.’ AND t1.refid = t2.refid);
Das mit dem subselect funktioniert, sieht aber furchbar kompliziert aus und ist sicher nicht optimal. Gibt es eine bessere/optimalere Lösung ?
Doch nicht so einfach . Ich hab mich entweder unpräzise ausgedrückt oder habe dein Ansatz noch nicht verstanden.
Ich brauche den ersten Wert nach dem Datum für jede vorhandene refid. Mein Ansatz bringt ein Ergebnis der Art:
datum refid wert
1.9.10 1 25
2.9.10 2 56
1.9.10 4 34
Ich habe dein SQL wie folgt umgesetzt:
SELECT * FROM tabelle t1, tabelle t2 WHERE t2.datumzeit > $datum AND t1.refid = t2.refid ORDER BY t1.datum DESC LIMIT 1;
Mit LIMIT 1 erhalte ich immer nur eine Zeile und dieser ist auch nicht der erste Wert nach dem Stichtag.
Der Link führte mich zu einer Lösung, vielen Dank an Alle. Hier eine Alternative zur obigen Lösung:
SELECT t1.refid, t1.datum, t1.xyz from tabelle t1
JOIN (SELECT id, MIN(datum) AS mdz FROM tabelle WHERE datum > $datumgrenze GROUP BY refid) AS t2
ON t1.refid = t2.refid AND t1.datum = t2.mdz;