мне интересно, если это возможно, чтобы запустить один запрос, который говорит мне следующее:
Mysql сравнить средние результаты с текущим результатом в одном запросе
Получить имена всех приложений, которые имеют (в настоящее время выполнение заданий), превышающие среднюю историческую среду выполнения
Таблица 1: История Работа
- Время начала работы
- конец работы время
- статус работы (успех, неудача, выполнение и т.д.)
- Application ID, который вызвал работу
Таблица 2: Приложения
- ID
- Имя
Казалось бы, простой вопрос, чтобы ответить, но создание запроса MySQL доказал быть достаточно сложным (хотя и интригующим) вызов ...
Запрос должен захватить рабочие места, где satus = executing
, используйте application.id
искать другие рабочие места, которые имеют соответствующие application.id
и status = success
, усреднить (end_time
- start_time
), а затем сравнить average time
с (current_time
- start_time
) из текущих выполняемых работ. Наконец, он должен использовать идентификатор приложения из любых заданий, которые не прошли этот тест, чтобы захватить из таблицы приложений. Возможно ли это сделать в одном запросе?
Для этого вопроса давайте предположим, что current_time
передается в качестве аргумента.
Я сделал попытку тройного вложенного запроса, но я получаю следующую ошибку, и я не знаю почему. Я потратил несколько часов, пытаясь получить эту работу, но я уже над моей головой здесь:
ERROR 1054 (42S22): Unknown column 'jh.start_time' in 'having clause'
Это моя попытка:
SELECT name FROM application
WHERE application.id IN (
SELECT application_id
FROM job_history AS jh
WHERE application_id IN (
SELECT application_id
FROM job_history
WHERE status='EXECUTION')
AND jh.status='SUCCESS'
HAVING (avg(jh.end_time - jh.start_time)) < (current_time - jh.start_time)
);
Изменить: предлагается, вот несколько выборочных данных.
Таблица 1
+--------+------------+------------+----------+----------------+
| job_id | status | start_time | end_time | application_id |
+--------+------------+------------+----------+----------------+
| job1 | successful | 100 | 200 | app1 |
| job2 | failed | 150 | 350 | app2 |
| job3 | successful | 200 | 400 | app1 |
| job4 | execution | 500 | 0 | app1 |
| job5 | successful | 600 | 800 | app3 |
+--------+------------+------------+----------+----------------+
Таблица 2
+------+------------------+
| id | name |
+------+------------------+
| app1 | Team Green's app |
| app2 | Team Blue's app |
| app3 | Team Red's app |
+------+------------------+
Я хотел бы, чтобы захватить job4, используйте application_id
найти job1 и job3. Затем возьмите среднее время работы job1 и job3 и сравните его с текущим временем выполнения job4. Если текущее время выполнения больше среднего времени выполнения, то я хотел бы сообщить имя приложения: Приложение команды Green Green.
Вы могли бы иметь больше успеха, если вы предоставите данные выборки и ожидаемые результаты. – sgeddes