PostgreSQL , Select aus 2 Tabellen, aber nur das Letzte element aus der Tabelle 2
Hey, ich habe 2 Tabellen in PostgreSql:
1 - documents: id, title
2 - updates: id, document_id, date
und einige Daten:
Dokumente:
| 1 | Test Title |
updates:
| 1 | 1 | 2006-01-01 |
| 2 | 1 | 2007-01-01 |
| 3 | 1 | 2008-01-01 |
So, Alle updates sind auf das gleiche Dokument, aber alle mit unterschiedlichen Termine für die updates.
Was ich versuche zu tun ist, um ein select-von der Dokumenten-Tabelle, sondern auch das neueste update basiert auf dem Datum.
Wie sollte eine Abfrage wie diese Aussehen? Dies ist die eine, die ich derzeit habe, aber ich bin mit der Auflistung aller updates, und nicht die Letzte, wie der, den ich brauche:
SELECT * FROM documents,updates WHERE documents.id=1 AND documents.id=updates.document_id ORDER BY date
Zu zählen; Der Grund muss ich diese in der Abfrage ist, dass ich möchte, um durch das Datum aus dem updates-Vorlage!
Edit: Das Skript ist stark
vereinfacht, so ich sollte in der Lage sein
erstellen Sie eine Abfrage, gibt eine beliebige Anzahl
der Ergebnisse aber, einschließlich der neuesten
aktualisierte Datum. Ich dachte, der mit einem
inner join oder left join oder so
wie das!?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen Sie eine abgeleitete Tabelle, die enthält nur die neuesten "updates" Datensätze pro document_id, und treten Sie dann "Dokumente" vor, dass:
Diese mit "un-verändert" - Dokumente, etwa so:
Verwenden
PostgreSQL
ErweiterungDISTINCT ON
:Dadurch wird die erste Zeile von jedem
document.id
cluster inORDER BY
um.Test-Skript zu überprüfen:
Es hat einige Vorteile gegenüber den bisherigen Antworten:
where documents.id in (1,2,3)
.Können Sie auch vermeiden, einer untergeordneten select-Anweisung mit group by, aber Sie haben, um eine Liste aller Felder der Dokumente in die group by-Klausel:
Aus der Spitze von meinem Kopf:
Wenn Sie wirklich wollen, nur die id-1 können diese Abfrage verwenden:
http://www.postgresql.org/docs/8.4/interactive/queries-limit.html
Sollten auch diese Arbeit