Вычислить продолжительность времени из вновь созданной записи и затем вставить это время в столбец записи? - PullRequest
0 голосов
/ 26 июля 2011

У меня есть база данных примерно так:

http://i.imgur.com/0vzoT.png

Основная таблица с именем

"Процедура" может содержать много строк в таблице "спокойствие_процесса"У каждой строки события процедуры есть столбец с именем «время».

Это здесь, поэтому я могу рассчитать общее время от первой строки до последней строки в этой записи.

Этовот что происходит:

-Строка в таблице процедур создана и данные добавлены.-Works

-Строки события Procedure создаются в таблице «Событие процедуры» и заполняются.-Работы

-Расчет продолжительности времени с использованием первой строки и последней строки в этой записи. - Не работает. - Вставка рассчитанного отрезка времени обратно в столбец строки процедуры, который был создан в начале.Этот столбец будет называться «длина_процесса»

Почему я это делаю?Это позволит пользователям находить процедуры

Это мой запрос:

SELECT procedure_id, SUBTIME(events_max.start, events_min.start) AS duration
FROM procedure
JOIN ( SELECT procedure_id, SELECT MAX(time) AS start FROM procedure_events GROUP BY procedure_id ) AS events_max USING ( procedure_id )
JOIN ( SELECT procedure_id, SELECT MIN(time) AS start FROM procedure_events GROUP BY procedure_id ) AS events_min USING ( procedure_id )
GROUP BY procedure_id

Должен ли я поместить это в хранимую процедуру?

В настоящее время мой запрос получает ошибку 1064:

Спасибо за ваше время.

1 Ответ

0 голосов
/ 27 июля 2011

В вашем запросе есть ошибки:

SELECT procedure_id, SELECT MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id 

Это нехорошо, вы используете select для каждого запроса, а не для каждого поля, которое вы хотите получить, или функции, которую вы хотите вычислить, поэтому выше будет:

SELECT procedure_id, MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id 

Во-вторых, TIME и START являются зарезервированными словами и не могут использоваться в качестве имен полей (если они не заключены в обратные символы `` - но это не очень хорошая рекомендация).

Всегда старайтесь максимально упростить ваши запросы - это даст вам:

  • простота обслуживания в будущем

  • читаемость

  • преимущества в производительности

Если вы просто хотите рассчитать продолжительность процедуры, это может дать вам отправную точку:

SELECT
  procedure_id,
  TIMEDIFF(MAX(`time`), MIN(`TIME`)) AS duration
FROM procedure_events
GROUP BY procedure_id

Затем вы можете вставить вычисленное значение в соответствующую таблицу.

Приветствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...