Dennis: Komplexes Select-Statement mit GROUP BY - wie gehts?

Beitrag lesen

Hallo an alle da draußen ;-)

Ich hänge gerade bei einer kleinen Datenbank-Abfrage - folgende Struktur sei gegeben:

name   | condition | inserted            | value
 --------+-----------+---------------------+--------
  WertA  | 10        | 2007-06-25 23:45:28 | 0.35
  WertA  | 12        | 2007-06-25 23:45:28 | 0.50
  WertA  | 10        | 2007-06-25 23:40:38 | 0.32
  WertA  | 12        | 2007-06-25 23:40:38 | 0.48
  WertB  | 4         | 2007-06-25 23:35:28 | 1.75
  WertB  | 7         | 2007-06-25 23:35:28 | 3.49
  WertB  | 4         | 2007-06-25 23:30:38 | 1.82
  WertB  | 7         | 2007-06-25 23:30:38 | 3.58

Der Zusamenhang ist folgender: name und condition sind theoretisch UNIQUE, praktisch ist allerdings eine History-Funktion gegeben, sodass name, condition und inserted UNIQUE sind. Sinn und Zweck: Zu einem bestimmten Zeitpunkt (inserted) hat eine bestimmte Einstellung (name) unter einer bestimmten Bedingung (condition) einen bestimmten Wert (value)

Obige Tabelle kann natürlich noch mehr Inhalt sein - es können noch mehr Optionen enthalten sein (z.B. "WertC") und es können noch mehr History-Stände der vorhandenen Optionen enthalten sein (z.B. "WertA" unter der Bedingung "10" von letztem Monat).

Nun gilt es daran ein paar Aufgaben umzusetzen. Als erstes wäre das das Auslesen des aktuellen Wertes einer Option X unter Bedingung Y - kein Problem:

~~~sql SELECT name, condition, inserted, value
  FROM config
  WHERE name = X AND condition = Y
  ORDER BY validation DESC
  LIMIT 1

  
Auch das Auslesen aller vorhandenen Optionen und deren Bedingungen ist kein Problem:  
  
  ~~~sql
SELECT name, condition  
  FROM config  
  GROUP BY name, condition

Doch wie kriege ich diese beiden Ergebnisse miteinander verbunden? Sprich: Wie kriege ich eine Ergebnisliste, mit allen enthaltenen Optionen und allen Bedingungen in der aktuellsten Version?

So muss das Ergebnis aussehen:

name   | condition | inserted            | value
 --------+-----------+---------------------+--------
  WertA  | 10        | 2007-06-25 23:45:28 | 0.35
  WertA  | 12        | 2007-06-25 23:45:28 | 0.50
  WertB  | 4         | 2007-06-25 23:35:28 | 1.75
  WertB  | 7         | 2007-06-25 23:35:28 | 3.49

Natürlich könnte ich das ganze clientseitig lösen, indem ich zuerst den zweiten SQL-Query an den Server ja - mir damit alle vorhandenen Optionen besorge - und dann für jede Option einen Query absetze der mir den aktuellen Wert holt.

Aber das wäre ja langweilig - ich hätte das gerne in einem SQL-Query, jedoch ist es mir bis jetzt noch nicht gelungen das zu realisieren, sämtliche Versuche mit HAVING scheiterten (dann kam meist gar nichts mehr zurück *g*). Also, wie macht man so etwas?

Viele Grüße,
  ~ Dennis.