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

Смежные вопросы