如何在sqlite中的几天内更新数据

时间:2014-01-27 20:06:43

标签: python sql sqlite

我有一个大约315,000条记录的数据库,这些记录跨越了几周的历程,并且每隔5秒就有一个条目。在我的数据库中,我有一个事件(仪器校准)每天同时发生(比如说,早上6点)。我正试图找到一种方法将校准因子应用于周围的记录。

我有朱利安日的列(一年中的某一天是实际值),光子,时间(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会引发错误。任何见解将不胜感激

1 个答案:

答案 0 :(得分: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子句是什么 - 它似乎是在那之前和之后一小时更新记录。我将其保留,因为它在您的示例查询中。