Wenn Fremdschlüssel von Zeilen gleich, dann nur eine Zeile auswählen

Hallo,

Postgresql 8.4

Ich habe eine Tabelle Zeitung, die so aussieht:

Zeitung
-------
zeitungsid (int, PK)
name (text)
-------

Und eine Tabelle Zeitungsausgabe:

ZeitungsAusgabe
------------------
ausgabeid (int, PK)
zeitungsid (int, FK)
datum (timestamp)
------------------

In dieser Tabelle werden Zeitungsausgaben (z.B. Die Ausgabe der New York Times vom 19.10.2010) gespeichert.
Inhalt der ZeitungsAusgabe Tabelle könnte dann etwa so aussehen:

ausgabeid   zeitungsid  datum
-----------------------------
1               1              19.10.2010
2               1              ...
3               1              ...
4               67            ...
5               67            ...
-----------------------------

Gesucht ist der SQL Befehl der von der Tabelle ZeitungsAusgabe nur die neueste Ausgabe von jeder Zeitung liefert.

Das Ergebnis des Befehls soll also so ausehen:

ausgabeid   zeitungsid  datum
-----------------------------
3               1              ...
5               67            ...
-----------------------------

Bestimmt ganz einfach, ich komme nur einfach nicht auf die Lösung :confused:

Danke Schonmal!
Gruß
Humppa



test=*# select * from zeitung;
 zeitungid |    name
-----------+------------
         1 | zeitung 1
        67 | zeitung 67
(2 rows)

test=*# select * from zeitungsausgabe ;
 ausgabeid | zeitungid |   datum
-----------+-----------+------------
         1 |         1 | 2009-10-19
         2 |         1 | 2009-10-20
         3 |         1 | 2009-10-21
         4 |        67 | 2001-01-01
         5 |        67 | 2001-01-02
(5 rows)

test=*# select distinct on (zeitungid) ausgabeid, zeitung.zeitungid, datum from zeitungsausgabe left join zeitung on (zeitungsausgabe.zeitungid=zeitung.zeitungid) order by zeitungid, datum desc;
 ausgabeid | zeitungid |   datum
-----------+-----------+------------
         3 |         1 | 2009-10-21
         5 |        67 | 2001-01-02
(2 rows)

Andreas

Perfekt!

vielen Dank Andreas!

ich verzeichne einen hohen bedarf an DISTINCT ON in letzter zeit - woran mag das liegen? :rolleyes:

An vermehrter Nutzung vernünftiger Datenbanken in Kombination mit anständigem Datenbankdesign.

Hehe. Ja, es ginge natürlich auch anders, aber DISTINCT ON() hat einen kleinen, aber feinen Vorteil: es ist eine PG-Erweiterung. World domination, now()!

Andreas