2013-08-05 3 views
-1

Мне нужно создать триггер, который принимает плоский источник события и преобразует его в строку с start_time и end_time.MySQL порядок элементов в `trigger after insert`

Есть две системы и работа, которая передает данные от одного к другому:

________   _________ 
|  | 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 

Update

Я не вижу причин, почему больше продолжительность и время безотказной работы должна быть сохраненное значение в сторона мой стол. Если бы они были рассчитаны на лету, это упростило бы большую работу.

+0

У меня две системы: «источник» и «судьба», в «источнике» я не могу создать триггеры. Я создал 'job' в' source', который каждую минуту вставляет данные в мою таблицу 'destiny', откуда я создал триггер, который пытается сместить события в одну строку. –

ответ

1

Я не знаю, если я очень хорошо понимаю, но

WHERE end_datetime > start_datetime 

не поможет?

таким образом вы не будете соответствовать равным или отрицательным временам.

+0

Хорошо, это хорошая идея, но что я могу вставить в эту запись в таблицу? –

+0

И если вы внимательно посмотрите, правильное время между событиями не 55 секунд, это 20 секунд. –

+0

после удаления полей для расчетов это прекрасно работает. –

Смежные вопросы