MySQL - Bedingung auf Maximum anwenden
rainerTS
- datenbank
Hallo,
ich hab ein kleines Problem mit einer SQL Abfrage:
ich frage
SELECT
MAX(time) AS time
FROM blabla
WHERE time < irgendeinwert
Dabei möchte ich aber nicht den Maximalwert, der die Bedingung erfüllt, sondern den Datensatz nur, falls der Maximalwert aller Datensätze die Bedingung erfüllt.
Hat jemand ne Idee?
Vielen Dank!
Hi,
Probiers mal so:
SELECT time
FROM blabla
HAVING MAX(time) < irgendeinwert
GROUP BY time
Gruß
Andi
Hi,
Probiers mal so:
SELECT time
FROM blabla
HAVING MAX(time) < irgendeinwert
GROUP BY timeGruß
Andi
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
SELECT
buddies.buddy_id,
buddies.buddy
FROM
buddies LEFT JOIN sessions ON buddies.buddy_id = sessions.user_id
WHERE
sessions.user_id IS NULL OR
sessions.time < irgendeinwert
GROUP BY buddies.buddy_id
ORDER BY
buddies.buddy
Wie bekomm ich da nun das HAVING rein, was ja eigentlich erst nach GROUP BY kommt, aber eine Alternative in der WHERE-Klausel darstellt?
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
hi,
Dabei möchte ich aber nicht den Maximalwert, der die Bedingung erfüllt, sondern den Datensatz nur, falls der Maximalwert aller Datensätze die Bedingung erfüllt.
Hat jemand ne Idee?
ja - formuliere doch den beren satz bitte mal in verständlichem deutsch.
ich habe keine idee, _was_ du willst.
gruß,
wahsaga