2014-01-27 23 views
0

我有一个大约315,000条记录的数据库,它跨越了几个星期,每5秒记录一次。在我的数据库中,我有一个同时发生的事件(仪器校准),每天都在发生(比如上午6点)。我试图找到一种方法将校准因子应用于周围的记录。如何在sqlite中在几天内更新数据

我有朱利安日(一年中的某一天是实际值),光子,时间(H:M:S)和流逝的时间(以秒为单位,小时的几分之一)的列。

到目前为止,我曾尝试:

cur.execute("UPDATE Conc SET Calfactor =(SELECT AVG(Photon) FROM Conc WHERE trim(hms) 
BETWEEN '06:03:00' AND '06:06:00' GROUP BY JulianDay) 
WHERE trim(hms) BETWEEN '05:00:01' AND '07:00:00';") 

子选择,如果自身的执行,将成功地拉在所有天均线的列表。我的问题是,当我尝试将这个列表应用到周围时间时,我无法得到它匹配的一天。 SQLite希望将它计算的第一个值应用于所有日子。当然,尝试应用GROUP BY或ORDER BY JulianDay会引发错误。任何有识之士将不胜感激

+0

为什么不只是拉列表,然后做第二个sqlite executemany命令来更新值?这似乎会更容易(我不喜欢庞大的复杂的SQL查询自己...太容易出错,难以调试imho) –

+0

感谢您的建议。当我需要优化我的程序时,我会尝试。 – user3037488

回答

0

你需要一个相关子查询:

UPDATE Conc 
    SET Calfactor =(SELECT AVG(Photon) 
        FROM Conc Conc2 
        WHERE trim(hms) BETWEEN '06:03:00' AND '06:06:00' and 
          conc.JulianDay = conc2.JulianDay 
        ) 
    WHERE trim(hms) BETWEEN '05:00:01' AND '07:00:00'; 

我不知道最后where条款是什么 - 它似乎前一小时,此后将要更新记录。我将它放入,因为它在您的示例查询中。

+0

完美工作 - 谢谢!是的,它将校准因子应用于周围的样品。 – user3037488

相关问题