2016-07-11 5 views
0

Итак, у меня есть несколько таблиц со значениями NULL, которые я хочу заполнить последним допустимым значением. Я могу выбрать новую таблицу с исправленным столбцом, но я не уверен, как обновлять значения в базе данных, может ли кто-нибудь помочь мне с оператором обновления?SQLite заполняет нулевые значения

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 

выход для этого запроса это

enter image description here

ответ

2

Вы можете использовать корреляционное обновление, чтобы сделать это.

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

Обратите внимание, что самая ранняя временная метка в таблице не может быть обновлена ​​с этим. Было бы все равно null, если бы это было null ранее.

+0

... или вы можете «написать очень короткую программу или хранимую процедуру», которая, вероятно, будет *, я, лично *, хотел бы сделать, хотя бы потому, что тогда я могу более легко увидеть * ** «что компьютер действительно сделает, и почему». ### * (Нет, я не оспариваю ваш ответ: на самом деле, я проголосовал за это.) * –

+0

для этого конкретного приложения. Я считаю, что запуск этого запроса просто лучше всего работает, большое спасибо, я попробовал что-то вроде что сначала, но не был уверен в том, как переустанавливать внешнюю таблицу вместо внутренней (что означает подзапрос), когда обе являются одной и той же таблицей. в конце мне просто пришлось добавить убывающий порядок и задать имена переменных, запрос получился так: update wme_test set var_13 = (выберите var_13 из wme_test as b где timeStamp <= wme_test.timeStamp и var_13 не является null order by timeStamp desc limit 1) где var_13 is null – heczaco

Смежные вопросы