0

大家好,

我对 MySQL 触发器不是很有经验,只做了一些基本的事情,比如在插入新记录时插入时间戳。考虑到这一点,我正在寻求有关如何解决以下问题的帮助。任何帮助都感激不尽。

我将原始事件收集到一个表中。当标签改变状态时写入这些事件,即打开或关闭。示例见下表;

events_raw

+----+----------+-----+-------+---------------------+
| id | location | tag | state | time                |
+----+----------+-----+-------+---------------------+
| 1  | 14       | 23  | ON    | 2013-06-07 07:59:52 |
| 2  | 14       | 24  | ON    | 2013-06-07 08:13:03 |
| 3  | 14       | 17  | ON    | 2013-06-07 08:21:21 |
| 4  | 14       | 23  | OFF   | 2013-06-07 08:25:15 |
| 5  | 14       | 6   | ON    | 2013-06-07 09:30:55 |
| 6  | 14       | 24  | OFF   | 2013-06-07 09:58:42 |
| 7  | 14       | 23  | ON    | 2013-06-07 09:58:53 |
+----+----------+-----+-------+---------------------+

我想要实现的是第二个表,如下例所示。将记录插入 events_raw 时,将它们处理到另一个表中,该表有一条记录,其中包含该标记打开的时间和它更改为关闭的时间。一旦处理完毕,我想从alarm_data 中删除记录。

events_processed

+----+----------+-----+---------------------+---------------------+
| id | location | tag | time_start          | time_finish         |
+----+----------+-----+---------------------+---------------------+
| 1  | 14       | 23  | 2013-06-07 07:59:52 | 2013-06-07 08:25:15 |
| 2  | 14       | 24  | 2013-06-07 08:13:03 | 2013-06-07 09:58:42 |
+----+----------+-----+---------------------+---------------------+

如果我的解释很糟糕,我真的很抱歉。我真的坚持这一点,如果您需要更多信息继续请说。

再次感谢您的帮助。

4

1 回答 1

0

如果您在 Location + Tag 列中有一个唯一键..那么您可以在 events_row 中编写一个触发器作为

CREATE TRIGGER TGR_ROW_AI AFTER INSERT ON event_Row FOR EACH ROW BEGIN

    INSERT INTO events_processed (location,tag,time_start) 
    VALUES (New.Location,New.tag,new.time) 
    ON DUPLICATE KEY UPDATE time_finish =new.time ;
END;

我假设 ID 列是一个 autoIncrement 列。

于 2013-06-08T13:24:59.603 回答