2014-01-27 47 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

相關問題