Доброе утро,
Я пытаюсь объединить два запроса в один, чтобы массив результатов можно было заполнить в одну таблицу. Данные извлекаются из одной таблицы, и математические вычисления должны выполняться для одного из столбцов. Вот что у меня сейчас:
SELECT
laboratory,
SUM(total_produced_week) AS total_produced_sum,
SUM(total_produced_over14) AS total_over14_sum,
100*(SUM(total_produced_over14)/sum(total_produced_week)) as divided_sum,
max(case when metrics_date =maxdate then total_backlog else null end) as total_backlog,
max(case when metrics_date =maxdate then days_workable else null end) as days_workable,
max(case when metrics_date =maxdate then workable_backlog else null end) as workable_backlog,
max(case when metrics_date =maxdate then deferred_over_30_days else null end) as deferred_over_30_days
FROM
test,
(
select max(metrics_date) as maxdate
from metrics
) as x
WHERE
YEAR(metrics_date) = YEAR(CURDATE())
AND MONTH(metrics_date) = MONTH(CURDATE())
GROUP BY
laboratory
ORDER BY 1 ASC
Вот разбивка:
Для каждого лабораторного участка мне нужно:
1) Выполните сумму MONTH TO DATE (только для текущего месяца), разделите и умножьте на 100 для каждого сайта, чтобы получить процент.
2) Показать другие столбцы (total_backlog, days_workable, workable_backlog, deferred_over_30_days) только для самой последней даты обновления (metrics_date).
Приведенный выше запрос отлично работает # 1 - я получаю столбцы total_produced_sum, total_over14_sum и split_sum с правильной математикой.
Однако другие столбцы, упомянутые в # 2, возвращают NULL. Данные доступны в таблице на самую последнюю обновленную дату, поэтому в столбцах следует указывать эти данные. Кажется, у меня есть проблема с CASE, но я не очень знаком с этой функцией, поэтому она может быть неправильной.
Я использую MySQL 5.0.45
Заранее спасибо за любые предложения!
Chris
P.S. Вот два оригинальных запроса, которые работают правильно. Их необходимо объединить, чтобы полный набор результатов можно было выводить в таблицу, организованную лабораторией.
Запрос 1:
SELECT SUM(total_produced_week) AS total_produced_sum,
SUM(total_produced_over14) AS total_over14_sum
FROM test
WHERE laboratory = 'Site1'
AND YEAR(metrics_date) = YEAR(CURDATE()) AND MONTH(metrics_date) = MONTH(CURDATE())
Запрос 2:
SELECT laboratory, total_backlog, days_workable, workable_backlog, deferred_over_30_days,
items_over_10_days, open_ncs, total_produced_week, total_produced_over14
FROM metrics
WHERE metrics_date = (select MAX(metrics_date) FROM metrics)
ORDER BY laboratory ASC