我有一个大约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会引发错误。任何见解将不胜感激
答案 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
子句是什么 - 它似乎是在那之前和之后一小时更新记录。我将其保留,因为它在您的示例查询中。