2013-08-05 28 views
-1

我需要創建一個觸發器,它需要一個扁平事件源並將其轉換爲具有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 

更新

我不明白了一個道理了,爲什麼要時間和正常運行時間是在存儲的值我的桌旁。讓他們即時計算將簡化大量工作。

+0

我有兩個系統,'source'和'destiny','source'我不能創建觸發器。我在'source'上創建了一個'job',每分鐘都會將數據插入到我的'destiny'表中,從那裏我創建了一個試圖將事件平鋪到一行中的觸發器。 –

回答

1

我不知道如果我理解得很好,但

WHERE end_datetime > start_datetime 

不幫你?

用這種方法你不會匹配平等或負面的時間。

+0

好吧,這是個好主意,但是我可以將該記錄重新插入表格中? –

+0

如果你仔細看看,事件之間的正確時間不是55s,它是20秒.. –

+0

刪除字段計算後,這完美的作品。 –