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 |
+----+----------+-----+-------+---------------------+

私が達成したいのは、以下の例のような 2 番目のテーブルです。レコードが events_raw に挿入されると、タグがオンであった時刻とオフに変更された時刻を含む 1 つのレコードを持つ別のテーブルにそれらを処理します。処理したら、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 に答える