MySQL Query для выполнения расчета и отображения данных на основе 2 различных критериев даты - PullRequest
0 голосов
/ 06 января 2011

Доброе утро,

Я пытаюсь объединить два запроса в один, чтобы массив результатов можно было заполнить в одну таблицу. Данные извлекаются из одной таблицы, и математические вычисления должны выполняться для одного из столбцов. Вот что у меня сейчас:

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

1 Ответ

0 голосов
/ 06 января 2011

Ошибка оператора.

Я создал копию исходной таблицы (с именем «metrics») в таблицу с именем «test». Затем я изменил metrics_date в новой «тестовой» таблице, включив в нее данные с января 2011 года (за текущий месяц). В то время как первая часть запроса, которая выполняет математику, использовала таблицу «test» (и работала должным образом), вторая половина, которая извлекает самые последние обновленные данные, использовала исходную таблицу «metrics», которая не строки с метрикой_даты в этом месяце.

Когда я изменил запрос, чтобы использовать «тест» для обеих частей запроса, все работало, как ожидалось. И теперь я чувствую себя действительно глупо.

Спасибо, парни!

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