Aktualisieren einer Spalte mit den Ergebnissen einer Abfrage in PostgreSQL

7

Ich habe die folgende Tabelle in PostgreSQL 9.2, die Zeitstempel enthält:

gid [PK] (bigserial), timestamp_mes (Zeitstempel ohne Zeitzone), time_diff (Intervall)
1, 2012-01-23 11:03:40, leer
2, 2012-01-23 11:03:42, leer
3, 2012-01-23 11:03:44, leer

Ich habe eine Intervallspalte (time_diff) hinzugefügt und möchte sie mit Zeitdifferenzwerten aus dieser Abfrage füllen:

%Vor%

Ich habe die folgende Abfrage versucht, die time_diff-Spalte ohne Erfolg zu aktualisieren:

%Vor%

Dies führt zu einem Fehler:

  

FEHLER: mehr als eine Zeile, die von einer als Ausdruck verwendeten Unterabfrage zurückgegeben wurde

Wie gehe ich vor, um die Spalte "time_diff" mit den Werten aus der Zeitdifferenzabfrage zu aktualisieren?

    
jatobat 07.12.2012, 17:18
quelle

3 Antworten

22

In etwa so:

%Vor%     
a_horse_with_no_name 07.12.2012, 19:32
quelle
3

Sie können eine Fensterfunktion nicht direkt in einem UPDATE verwenden, Sie müssen sie stattdessen in einem Sub-SELECT verwenden - was Sie getan haben. Die Art und Weise, wie Sie versucht haben, dieses Sub-SELECT in Ihrem UPDATE zu verwenden, ist jedoch keine gültige Syntax. Sie müssen das Sub-SELECT in die FROM-Klausel Ihres Updates einfügen, wie in den Postgres-Dokumenten erläutert:

Ссылка

Die richtige Syntax für das, was Sie tun möchten, ist:

%Vor%

Offensichtlich müssen Sie den Spaltennamen einer eindeutigen ID ersetzen, die Ihre Zeilen haben, wo ich {{SomeUniqueId}}

geschrieben habe     
Mark Amery 07.12.2012 19:36
quelle
1

Tatsächlich erhalten Sie diesen Fehler, weil Ihre Unterabfrage mehrere Ergebnisse zurückgibt,

Ich kann Ihre Anfrage nicht verstehen,

Ich werde Ihnen ein Beispiel geben, um es zu lösen,

%Vor%

Hier : -ihr_Operation bedeutet die Logik zum Finden der Zeitdifferenz,

    
Hunter 07.12.2012 17:30
quelle