Wagyman: SQL-Abfrage für eine Historie

Hallo Experten,

ich habe folgendes Problem: Ich habe eine Datenbank mit einer Tabelle in der sich Mitteilungen von verschiedenen Personen befinden.

nachrichten

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

  1. 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;

    1. 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

      1. http://www.mysql.com/doc/en/example-Maximum-column-group-row.html

        Gruss Daniela

        Danke, ich hab's hinbekommen...

        Gruss,
        Wagyman

  2. 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

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist