mysql: HAVING
split.s
- datenbank
Hi,
habe folgendes Problem mit HAVING:
id | name | datum | nachricht
1 | Daniel | 2009-10-10 14:13:21 | hmm
2 | Otto | 2009-10-11 04:23:31 | na wie gehts
3 | Daniel | 2009-10-12 10:22:31 | blabla
Jetzt will ich die namen Namen gruppieren:
SELECT id,nachricht FROM nachrichten GROUP BY name HAVING MAX(datum)
Zweck: Ich möchte von jedem User nur die letzte Nachricht anzeigen.
Das Ergebnis müsste eigentlich so aussehen:
3 blabla
2 na wie gehts
Leider ignoriert er aber scheinbar das HAVING komplett und zeigt anstelle dessen
1 | hmm
2 | na wie gehts
Hallo,
HAVING MAX(datum) ist ja so auch nicht wirklich vollständig. Das ist ungefähr genauso als wenn du schreibst WHERE datum.
Ausserdem ist deine Problemstellung nicht mit HAVING zu lösen sondern mit einer korrelierenden Unterabfrage
SELECT n1.id, n1.name, n1.datum, n1.nachricht
FROM nachrichten n1
WHERE datum =
(SELECT max(datum)
FROM nachrichten n2 where n2.name = n1.name)
oder mit einem Join
SELECT n1.id, n1.name, n1.datum, n1.nachricht
FROM nachrichten n1
INNER JOIN (Select name, max(datum) as maxdatum
FROM nachrichten
GROUP BY name) n2
on n1.name = n2.name
and n1.datum = n2.maxdatum
Gruss, Frank
ALTER SCHWEDE!
Das SUBSELECT dauert ja fast 3 Minuten bei ca. 1 Mio Datensätzen was ja noch relativ wenig ist!
Hi!
Das SUBSELECT dauert ja fast 3 Minuten bei ca. 1 Mio Datensätzen was ja noch relativ wenig ist!
Welche nicht gesetzten Indexe werden dazu nicht verwendet?
Lo!