我需要創建一個觸發器,它需要一個扁平事件源並將其轉換爲具有start_time和end_time的行。插入後觸發器中的元素的MySQL順序
有兩個系統,並從一個通信的數據到另一個作業:
________ _________
| | Job | Destiny |
| Source | -----> | |
|________| data |_Trigger_|
內命運,有兩個表:
____________________ ________________________
| | Trigger | |
| Flat event table | <--------- | Copy of source table |
|____________________| |________________________|
以下表示從源的示例:
| datetime | tagname | value |
1/1/13 07:00 tag 1
1/1/13 07:05 tag 0
1/1/13 10:07 tag 1
1/1/13 13:13 tag 0
我需要的數據看起來像:
| id | start_time | end_time | duration | uptime | reason
event1 1/1/13 07:00 1/1/13 07:05 5 0 xxx
event2 1/1/13 10:07 1/1/13 13:13 76 182 yxy
到目前爲止,我已經創建邏輯找到的最後一個事件和更新它,它一直工作正常,除了一個小細節:如果事件的發生確實頻繁,系統將創建一個大頭插入,並批量正在奇怪的訂單執行。
如果這是某種有益的,這是我用它來得到正確的ID觸發的段: (對於完整的代碼點擊here)
select delays.id,product_id,crew_id
into t_lastId, t_product_id,t_crew_id
from delays join line_reasons on delays.line_reason_id = line_reasons.id
where line_reasons.line = t_line order by delays.start_time desc limit 1;
我還要提到的是,我可以不主系統上創建觸發器,我創建了一個工作,將基本複製這些值到一個events
表:
id | event_timestamp | event_value | event_attr... |
1 1/1/13 07:00 1 'event started'...
2 1/1/13 07:05 2 'event ended'...
我的觸發器是在這個events
表上運行。
顯示大部分的外觀的例子一樣,爲什麼插入失敗與我的觸發器:
| datetime | tagname | value |
1/1/13 07:40:10 tag 1
1/1/13 07:41:05 tag 1
1/1/13 07:40:45 tag 0
正如你所看到的大部分是不是在正確的時間順序插入,給這個輸出:
| id | start_time | end_time | duration | uptime | reason
event1 1/1/13 07:40:10 1/1/13 07:40:10 5 0 xxx
event2 1/1/13 07:41:05 1/1/13 07:40:45 -20s 55s yxy
更新
我不明白了一個道理了,爲什麼要時間和正常運行時間是在存儲的值我的桌旁。讓他們即時計算將簡化大量工作。
我有兩個系統,'source'和'destiny','source'我不能創建觸發器。我在'source'上創建了一個'job',每分鐘都會將數據插入到我的'destiny'表中,從那裏我創建了一個試圖將事件平鋪到一行中的觸發器。 –