简单的SQLite UPDATE语句不起作用

时间:2019-04-25 10:19:14

标签: database sqlite

我在数据库中插入了一个新列,并希望填充数据。它应根据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);

由于大小约为ca,因此无法通过python之类的编程语言处理任务。 20GB的数据库。

1 个答案:

答案 0 :(得分:0)

您可以这样做:

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)
  );