Probleme mit Max

10/03/2008 - 18:35 von Gregor Thul | Report spam
Hallo,
ich hoffe ich bin hier richtig. Ist zwar nur eine allgemeine SQL Frage und
nicht speziell zum SQL-Server aber ich finde einfach nirgends etwas
vernünftiges.
Ich will aus der Tabelle MessageDB den letzten Poster zur replyid Nr 2
raussuchen.
Die Spalten: id,poster,dbtime,replyid
beim googlen finde ich immer nur:

SELECT Max(MessageDB.dbtime)
FROM MessageDB
WHERE (((MessageDB.replyid)=2));

Funktioniert natürlich. Aber ich bekomme ja nur den Wert des letzten Datums.
Ich will aber den Namen des Posters haben.
SELECT poster, Max(MessageDB.dbtime) funktioniert nicht. Ich komme
einfach nicht weiter.
Vielleicht kann mir jemand weiterhelfen.

Vielen Dank
Gregor
 

Lesen sie die antworten

#1 Elmar Boye
10/03/2008 - 19:03 | Warnen spam
Hallo Gregor,

Gregor Thul schrieb:
ich hoffe ich bin hier richtig. Ist zwar nur eine allgemeine SQL Frage und
nicht speziell zum SQL-Server aber ich finde einfach nirgends etwas
vernünftiges.

Ich will aus der Tabelle MessageDB den letzten Poster zur replyid Nr 2
raussuchen.
Die Spalten: id,poster,dbtime,replyid
beim googlen finde ich immer nur:

SELECT Max(MessageDB.dbtime)
FROM MessageDB
WHERE (((MessageDB.replyid)=2));



Da gibts mehrere Möglichkeiten, je nachdem womit das RDBMS klarkommt.

Via Unterabfrage:

SELECT m.*
FROM MessageDB AS m
WHERE replid = 2
AND dbtime = (SELECT MAX(dbtime)
FROM MessageDB
WHERE replyid = 2)

oder als abgeleitete Tabelle:

SELECT m.*
FROM MessageDB AS m
INNER JOIN (SELECT
replyid, MAX(dbtime) AS MaxDbTime
FROM MessageDB
GROUP BY replyid) AS mm
ON m.replyid = mm.replyid
AND m.dbtime = mm.maxdbtime

Beachte das ggf. mehrere Zeilen geliefert werden können,
wenn mehrere Antworten zur gleichen Zeit erstellt wurden.

Ein Index auf (replyid, dbtime) ist für beide Abfragen hilfreich.

Gruß Elmar

Ähnliche fragen