Aktualisieren eine Spalte mit den Ergebnissen einer Abfrage in PostgreSQL

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

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

Habe ich ein Intervall Spalte (time_diff) und würde gerne, um ihn zu füllen mit der Zeit-Differenz-Werte, die sich aus dieser Abfrage:

SELECT timestamp_mes - lag(timestamp_mes, 1) 
over (order by timestamp_mes) as diff
from gc_entretien.trace order by timestamp_mes

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

UPDATE gc_entretien.trace set time_diff = 
(SELECT trace.timestamp_mes - lag(trace.timestamp_mes, 1) 
over (order by trace.timestamp_mes) 
from gc_entretien.trace order by timestamp_mes);

Dies führt zu einem Fehler:

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

Wie soll ich Vorgehen zum aktualisieren der time_diff Spalte mit den Werten, die aus der Zeit-Differenz Abfragen?

  • Nicht sicher über die Logik der app, aber die select gibt möglicherweise mehr Zeilen, die bewirkt, dass Fehler bei der Zuordnung in die einzelnen Spalte (wie Sie in Ihrem UPDATE)... wenn das Ergebnis in der ersten Zeile zurückgegeben SELECT verwenden LIMIT 1 zu machen, die Zuordnung möglich. Sowieso das wählen scheint nicht korrekt ausgelegt werden.
  • Es gibt ein problem mit diesem, weil die Unterabfrage ist (derzeit) unkorreliert, LIMIT 1 wird einfach nur wieder die oberste Zeile, Zeit, nicht eine, die hat nichts zu tun mit der aktuellen Zeile.
  • richtig, das ist, warum ich sagen, es ist nicht richtig ausgelegt Abfrage. Zuerst @jatobat müssen zum erstellen einer Abfrage zurückgeben, die genau einen Wert (den, den er braucht-je nach Anwendung-Logik) und setze es dann als Unterabfrage in UPDATE - Abfrage... - usual-Szenario ist die Nutzung von einigen Bezeichnern/Werten aus der Tabelle (resp. Zeile) aktualisiert in der Unterabfrage als Bedingung(en) in der Unterabfrage WHERE - Klausel. Aber ehrlich gesagt: ich verstehe nicht die Logik der app und auch nicht wollen, um es zu verstehen 🙂
InformationsquelleAutor jatobat | 2012-12-07
Schreibe einen Kommentar