dedlfix: MySQL DB Abfrage

Beitrag lesen

Tach!

Correlated Subquery nennt sich das, was du suchst. In der äußeren Query fragst du alle Session-IDs ab und korreliert dazu in den Subquerys die beiden Werte. Allerdings solltest du das auch ganz ohne Subquery mit dem GROUP BY wie beim Zählen hinbekommen, dann aber MIN() und MAX() vom timestamp holen.
Habe ich das mit dieser Abfrage richtig verstanden, bzw. wo liegt hier der Fehler?

Nicht ganz. Der wichtigere Teil zur einfacheren Lösung war mein letzter Satz. Nimm deine GROUP-BY-Variante und ergänze sie um den Min/Max-Teil. Eine Correlated Subquery führt auch zum Ziel, ist aber in dem Fall nicht notwendig.

SELECT DISTINCT a.sessionID FROM user\_log a WHERE a.userID = xxx AND a.sessionID = ANY

Wenn man denkt, ein DISTINCT verwenden zu müssen, sollte man besser noch einmal auf die Query schauen, denn oft ist das ein Zeichen, dass man eine unnötig große und redundante Zwischenergebnismenge gebildet hat.

ANY ist nur eine der Möglichkeiten, Ccorrelated Subquery zu erstellen, aber nicht die für deinen Fall nutzbringende. Es hätte ungefähr so aussehen müssen, wobei statt der einfachen Auflistung im äußeren SELECT auch eine Rechnung stehen könnte:

SELECT a.x, (SELECT timestamp FROM tab2 b WHERE b.x = a.x ORDER BY ...) min, (SELECT ...) max FROM tab1 a

dedlfix.