PostgreSQL, Wählen Sie aus 2 Tabellen, aber nur das letzte Element aus Tabelle 2

8

Hey, ich habe 2 Tabellen in PostgreSql:

%Vor%

und einige Daten:

Dokumente:

%Vor%

Aktualisierungen:

%Vor%

Also Alle Updates zeigen auf das gleiche Dokument, aber alle mit unterschiedlichen Daten für die Updates.

Was ich versuche, ist, eine Auswahl aus der Dokumententabelle zu treffen, aber auch das neueste Update basierend auf dem Datum einzufügen.

Wie sollte eine solche Abfrage aussehen? Dies ist die, die ich derzeit habe, aber ich listet alle Updates auf, und nicht die neueste als die, die ich brauche:

%Vor%

einschließen; Der Grund, warum ich das in der Abfrage brauche, ist, dass ich nach dem Datum aus der Update-Vorlage bestellen möchte!

  

Bearbeiten: Dieses Skript ist schwer   vereinfacht, also sollte ich es können   Erstellen Sie eine Abfrage, die eine beliebige Zahl zurückgibt   von Ergebnissen, aber einschließlich der neuesten   Neues Datum. Ich dachte daran, ein   Inner Join oder Links Join oder etwas   wie das!?

    
dr. squid 09.11.2009, 20:19
quelle

5 Antworten

7

Sie können eine abgeleitete Tabelle erstellen, die nur die neuesten "updates" Datensätze pro document_id enthält, und dann "documents" mit diesem verbinden:

%Vor%

Dies behandelt "nicht aktualisierte" Dokumente wie folgt:

%Vor%     
pilcrow 09.11.2009, 20:46
quelle
12

Verwenden Sie PostgreSQL Erweiterung DISTINCT ON :

%Vor%

Dies nimmt die erste Zeile von jedem document.id Cluster in ORDER BY Reihenfolge.

Testskript zum Überprüfen:

%Vor%     
Quassnoi 10.11.2009 15:33
quelle
3

Von ganz oben:

%Vor%

Wenn Sie nur ID 1 wollen, können Sie diese Abfrage verwenden:

%Vor%

Ссылка

    
EricSchaefer 09.11.2009 20:23
quelle
3
%Vor%

Es hat einige Vorteile gegenüber früheren Antworten:

  • Sie können document_id nur an einer Stelle schreiben, die praktisch ist;
  • Sie können wo weglassen und Sie erhalten eine Tabelle aller Dokumente und ihrer neuesten Updates;
  • Sie können breitere Auswahlkriterien verwenden, zum Beispiel where documents.id in (1,2,3) .

Sie können auch einen Subselect vermeiden, indem Sie group by verwenden, aber Sie müssen alle Felder von Dokumenten in der group by-Klausel auflisten:

%Vor%     
Tometzky 10.11.2009 15:24
quelle
-1

Dies sollte auch funktionieren

%Vor%     
David Harris 09.11.2009 20:36
quelle

Tags und Links