SQL-Abfrage für eine Historie
Wagyman
- datenbank
Hallo Experten,
ich habe folgendes Problem: Ich habe eine Datenbank mit einer Tabelle in der sich Mitteilungen von verschiedenen Personen befinden.
personen_id | nachricht_id | nachricht | datum |
------------------------------------------------------------
1001 | 1 | bla, bla... | 2002-11-21 |
------------------------------------------------------------
1001 | 2 | bla, bla... | 2002-11-21 |
------------------------------------------------------------
1001 | 3 | bla, blub.. | 2002-11-21 |
------------------------------------------------------------
1002 | 1 | bla, bla... | 2002-11-21 |
------------------------------------------------------------
1003 | 1 | bla, bla... | 2002-11-18 |
------------------------------------------------------------
...
Ich möchte in einer Liste nun immer die letzte Nachricht der jeweiligen Personen ausgeben.
Max Mustermann (1001) bla, blub.. vom 21.11.2002
Karl Heinz (1002) bla, bla... vom 21.11.2002
Fritz Schmitz (1003) bla, bla... vom 18.11.2002
Wie frage ich nur die letzten Nachrichten mit dem Select-Befehl ab?
Hat jemand 'ne Lösung?
Gruß
Wagyman
Moin Wagymam
personen_id | nachricht_id | nachricht | datum |
1001 | 1 | bla, bla... | 2002-11-21 |
1001 | 2 | bla, bla... | 2002-11-21 |
1001 | 3 | bla, blub.. | 2002-11-21 |
1002 | 1 | bla, bla... | 2002-11-21 |
1003 | 1 | bla, bla... | 2002-11-18 |
...
Zauberwörter GROUP BY und ORDER BY
also
select * from Mitteilungen Group by personen_id order by datum desc;
Hi Vimes
Zauberwörter GROUP BY und ORDER BY
also
select * from Mitteilungen Group by personen_id order by datum desc;
Nein, genau eben nicht. ORDER BY hat hier keinerlei Einfluss da es
erst viel später ausgeführt wird. Falls es nicht MySQL ist, wird
das sogar einen Syntaxfehler geben. Wenn es MySQL ist, kriegst du
dafür ein undefiniertes Resultat: http://www.mysql.com/doc/en/Group_by_functions.html
Es bleibt also die Lösung von Romy mit Subselect die mit
MySQL < 4 mangels Subselects nicht geht. Für MySQL geht es entweder
mit mehreren Queries oder aber so:
http://www.mysql.com/doc/en/example-Maximum-column-group-row.html
Gruss Daniela
http://www.mysql.com/doc/en/example-Maximum-column-group-row.html
Gruss Daniela
Danke, ich hab's hinbekommen...
Gruss,
Wagyman
Hallo Experten,
select * from table where benutzer='1001' and nachricht_id=(select max(nachrichten_id) from table where benutzer = '1001'
kann sein, dass es effizientere Lösungen gibt, aber dies hier sollte funktionieren
ciao
Gruß
Wagyman