Простой SQLite UPDATE оператор не работает - PullRequest
0 голосов
/ 25 апреля 2019

Я вставил новый столбец в свою базу данных и хочу заполнить данными.Он должен быть рассчитан из разности значения nom_arr_time и значения nom_dep_time предыдущего ряда.

Если я пытаюсь выполнить инструкцию SELECT, то все работает нормально.Но обновление не будет работать, столбец останется пустым.

UPDATE mobile_statistik 
SET nom_fahrzeit = (SELECT nom_arr_time - LAG(nom_dep_time,1,0) OVER (ORDER BY id) 
                    FROM mobile_statistik);

Выполнение задачи на языке программирования, таком как python, не вариант из-за размера, ок.20 ГБ базы данных.

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете сделать это так:

UPDATE mobile_statistik 
SET nom_fahrzeit = (
  SELECT t.nom_arr_time - t.prev FROM (
    SELECT id, nom_arr_time, LAG(nom_dep_time,1,0) OVER (ORDER BY id) prev 
    FROM mobile_statistik
  ) t
  WHERE t.id = mobile_statistik.id 
)

или без LAG():

UPDATE mobile_statistik 
SET nom_fahrzeit = 
  nom_arr_time - (
    SELECT m.nom_dep_time 
    FROM mobile_statistik m 
    WHERE m.id = (SELECT MAX(t.id) FROM mobile_statistik t WHERE t.id < mobile_statistik.id)
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...