2015-10-21 3 views
0

Мне нужно автоматически вставить строку в таблицу статистики, которая идентифицируется номером месяца, если новый месяц не существует в виде строки.sqlite3 триггер для автоматической записи новой записи месяца

«карта» представляет собой текущий счет индивидуальных идентификаторов, которая хранит текущее значение (получает сброс во время одновременного нажатия клавиша), счетчик опрокидывания и текущей сумму всех событий на это ID

статистику сохраняет текущий счет всех событий ID и количества опрокидывания в данном месяце.

CREATE TABLE IDS (ID_Num VARCHAR(30), Curr_Count INT, Rollover_Count INT, Total_Count INT); 
CREATE TABLE stats(Month char(10), HitCount int, RolloverCount int); 
CREATE TRIGGER update_Tstats BEFORE UPDATE OF Total_Count ON IDS 
WHEN 0=(SELECT HitCount from stats WHERE Month = strftime('%m','now')) 

(также попробовал «IS NULL» на другом конце КОГДА п ... до сих пор не радость)

BEGIN 
INSERT INTO stats (Month, HitCount, RolloverCount) VALUES (strftime('%m', 'now'),0,0); 
END; 

Я он работает до точки, но, как опрокидывание было обновляется два раза за цикл (значение изменилось вверх и вниз с помощью SQL-запроса, который у меня есть в скрипте python), он дал мне двойные значения в счете опроса статистики. Итак, теперь я запускаю двойной запрос в моем скрипте. Однако все это падает, если текущий номер месяца не существует в таблице статистики.

Все, что мне нужно сделать, это проверить, существует ли пустая запись для текущего месяца для выполнения запросов UPDATE для скрипта python, а если нет, INSERT. Сам сценарий не может выполнить запрос типа «запускать один раз» при первом запуске, поскольку он может работать в течение нескольких дней, включая переход на новый месяц.

Любая помощь была бы чрезвычайно оценена.

ответ

0

Чтобы проверить, существует ли запись, использование EXISTS:

CREATE TRIGGER ... 
WHEN NOT EXISTS (SELECT 1 FROM stats WHERE Month = ...) 
BEGIN 
    INSERT INTO stats ... 
END; 
+0

Вы знаете, как иногда вы хотите так трудно на проблему и не может увидеть ответ прямо перед вашим лицом? Это как-раз тот случай! Именно то, что я почти ответил в своем собственном вопросе ... Спасибо CL за ваш быстрый ответ :-) – justcheckinm8

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