2016-07-11 16 views
0

So habe ich einige Tabellen mit NULL-Werten, die ich mit dem letzten gültigen Wert füllen möchte. Ich kann eine neue Tabelle mit der korrigierten Spalte auswählen, aber ich bin mir nicht sicher, wie ich die Werte in der Datenbank aktualisieren soll. Könnte mir jemand mit der Update-Anweisung helfen?SQLite füllt Nullwerte

select b.timeStamp, 
     b.var_5, 
    (select a.var_5 from wme_test as a where a.timeStamp<=b.timeStamp and a.var_5 <> 'NULL' order by timestamp desc limit 1) as correctedVar5 
from wme_test as b 

die Ausgabe für diese Abfrage ist dies

enter image description here

Antwort

2

Sie eine korrelierte Update, dies zu tun verwenden können.

update wme_test 
set var5 = (select var5 
      from wme_test 
      where tm >= wme_test.tm and var5 is not null 
      order by tm limit 1) 
where var5 is null 

Sample Fiddle

Beachten Sie, dass die frühesten Zeitstempel in der Tabelle nicht mit dieser aktualisiert werden kann. Es wäre immer noch null, wenn es zuvor null war.

+0

... oder Sie können "ein sehr kurzes Programm oder gespeicherte Prozedur schreiben", was wahrscheinlich ist, was ich persönlich tun würde, wenn auch nur, weil ich dann ** leichter * sehen kann * ** "Was der Computer wirklich tun wird, und warum." ### * (Nein, ich bestreite deine Antwort nicht: tatsächlich habe ich sie noch einmal abgestimmt.) * –

+0

Für diese spezielle Anwendung glaube ich, dass das Ausführen dieser Abfrage am besten funktioniert, vielen Dank, ich habe etwas versucht das war zuerst aber nicht sicher, wie man auf die äußere Tabelle statt auf die innere (das heißt die der Unterabfrage) referiert, wenn beide die gleiche Tabelle sind. Am Ende musste ich nur die absteigende Reihenfolge hinzufügen und die Variablennamen setzen, die Abfrage endete folgendermaßen: update wme_test set var_13 = (Wählen Sie var_13 aus wme_test als b wobei timeStamp <= wme_test.timeStamp und var_13 nicht ist null Sortierung nach timeStamp desc limit 1) wobei var_13 null ist – heczaco