2014-04-23 42 views
1

首先REPLACE語句我創建了兩個表:的在觸發器上的sqlite3

​​

然後,我創建了一個觸發如下。

create trigger ins after insert on min_data 
begin 
    replace into hour_data(ic, dt, cou, max, avg, min) 
    select ic, strftime('%Y-%m-%d %H:00:00', dt), AVG(cou) * 6, MAX(max), AVG(avg), MIN(min) from min_data where strftime('%Y-%m-%d %H:00:00', new.dt) <= dt and dt < strftime('%Y-%m-%d %H:00:00', new.dt, '+1 hour') and ic = new.ic; 
end; 

這是問題所在。在我將一些記錄插入到min_data之後,觸發器會將一些記錄插入到hour_data中,但hour_data中的記錄ID不是以1開頭,而是離散的。我該如何解決這個問題?

回答

0

REPLACE不更新現有記錄;它只是刪除任何舊記錄,然後插入一個新記錄。

你必須做手工的UPDATE或INSERT:

CREATE TRIGGER ... 
BEGIN 
    -- update the old record, if it already exists: 
    UPDATE hour_data 
    SET cou = (SELECT AVG(cou) * 6 ...), 
     max = (SELECT MAX(max) ...), 
     ... 
    WHERE ic = NEW.ic 
     AND dt = strftime('%Y-%m-%d %H:00:00', NEW.dt); 

    -- insert the new record, 
    INSERT INTO hour_data(...) 
    SELECT ... 
    WHERE ... 
     -- if it does not yet exist: 
     AND NOT EXISTS (SELECT 1 
         FROM hour_data 
         WHERE ic = NEW.ic 
         AND dt = strftime('%Y-%m-%d %H:00:00', NEW.dt)); 
END; 
+0

非常感謝你的幫助。現在我明白了原因。 – Aura