Abfrage über zwei Tabellen, Datensatz mit jüngstem Datum ausgeben

Hallo zusammen,

ich habe zwei Tabellen wobei die eine Kunden-Stammdaten und die andere gekaufte Produkte enthält. Hier zwei Beispiele:

KUNDEN
USERID | NAME | EMAIL
---------±----------±------------
1 | Florian | f@t.de
2 | Hase | a@b.de
3 | Maus | k@f.de
PRODUKTE

USERID | PRODUKT | KAUFDATUM
---------±-------------±------------
1 | Wurst | 2013-01-01
1 | Käse | 2013-01-04
1 | Milch | 2013-02-06
2 | Wurst | 2013-03-01
2 | Käse | 2013-03-04
2 | Milch | 2013-02-06
3 | Wurst | 2011-03-01
3 | Käse | 2011-03-04
3 | Milch | 2012-02-02


Wie frage ich mit SQL den Datensatz mit dem jüngsten Kaufdatum ab? Ergebnis soll sein:

USERID | NAME | EMAIL | PRODUKT | KAUFDATUM
---------±----------±-------------±-------------±----------------
1 | Florian | f@t.de | Milch | 2013-02-06
2 | Hase | a@b.de | Käse | 2013-03-04
3 | Maus | k@f.de | Milch | 2012-02-02

Ich bekomme zwar mit max() und “group by” einen Datensatz der das Kaufdatum enthält…

select a.*,max(b.kaufdatum) from kunden a, produkte b where a.user_id = b.user_id group by a.user_id, a.name, a.email

… weiss aber nicht wie ich den Produktnamen jetzt noch in die Ausgabe bekomme.

Über einen Tipp würde ich mich sehr freuen.

LG,
Florian

PG kennt dafür ganz praktischen window-Funktionen, u.a. row_number().

test=*# select * from (select u.userid, u.name, u.email, p.produkt, p.kaufdatum, row_number() over (partition by u.userid order by kaufdatum desc) from kunden u left join produkte p on u.userid=p.userid) foo where row_number = 1;
 userid |  name   | email  | produkt | kaufdatum  | row_number
--------+---------+--------+---------+------------+------------
      1 | florian | f@t.de | milch   | 2013-02-06 |          1
      2 | hase    | a@b.de | kaese   | 2013-03-04 |          1
      3 | maus    | k@f.de | milch   | 2013-02-02 |          1
(3 rows)

Andreas

Vielen, vielen Dank! Das ist super!