Philipp Hasenfratz: MySQL - Bedingung auf Maximum anwenden

Beitrag lesen

Halihallo rainerTS

SELECT time
   FROM blabla
   HAVING MAX(time) < irgendeinwert
   GROUP BY time

@Andi: GROUP BY ist *immer* vor HAVING!

Hmm, leider ist die Abfrage doch etwas komplexer - es ist eine Abfrage, welche meiner buddies / freunde einer Community gerade OFFline sind -> offline ist jemand, der entweder nicht in der Tabelle sessions steht, oder eben doch in der Tabelle steht, dessen größte Zeit aber kleiner ist als irgendeinwert
Wie bekomm ich da nun das HAVING rein, was ja eigentlich erst nach GROUP BY kommt, aber eine Alternative in der WHERE-Klausel darstellt?

Entweder du machst es via Subselect in der WHERE-Klausel, oder mit
einem Self-Join und GROUP BY über HAVING. Etwas mehr Fleisch um den
Knochen:

(Mit Subselect; MySQL>4.x):
SELECT *
   FROM
      session
   WHERE
      time >= ALL(
         SELECT time FROM session WHERE time IS NOT NULL
      )

oder (mit HAVING und Self-Join; MySQL<4.x)

SELECT a.sess_id, a.time
   FROM
      session AS a,
      session AS b
   GROUP BY
      <PRIMARY KEY('s) VON a> , a.time, ...
   HAVING
      a.time>=MAX(b.time)

Bemerkung: in GROUP BY *muss* der gesamte PRIMARY KEY der Relation
session (bezgl. Alias a) und alle Attribute, die in
SELECT projeziert werden enthalten sein.

Viele Grüsse

Philipp