2013-06-26 4 views
0

У меня есть 4 таблицы для разных дат, таблица выглядит следующим образом:найти максимальное значение среди различных таблиц группы по дате

enter image description here

, что я пытаюсь сделать, это найти максимальный ТПС для каждого имя_пользователя, имя_функции между всеми четырьмя днями в соответствии с часом. например, на рисунке, который я опубликовал, есть имя service_name (BatchItemService) в первом сыром, которое имеет (getItemAvailability) как имя_функции в дате 13-06-12 01. У меня есть одно имя службы для одного и того же имени_функции во всех остальных трех таблицах за тот же час " 01 ", но с разными днями, как день 13,14,15. Я хочу найти максимум tps для этого service_name, имя_функции, установленного для часа «01» среди всех четырех дней. Я пробовал это, но это дало мне неправильный результат.

SELECT 

    t.service_name, 
    t.function_name, 
t.date, 
    max(t.tps) 
FROM 
    (SELECT 
     service_name, function_name, date, tps 
    FROM 
     trans_per_hr_2013_06_12 

UNION ALL 
    SELECT 
     service_name, function_name, date,tps 
    FROM 
     trans_per_hr_2013_06_13 
GROUP BY service_name,function_name,date 
UNION ALL 
    SELECT 
     service_name, function_name,date, tps 
    FROM 
     trans_per_hr_2013_06_14 

UNION ALL 
    SELECT 
     service_name, function_name, date, tps 
    FROM 
     trans_per_hr_2013_06_15 

UNION ALL 
    SELECT 
     service_name, function_name,date, tps 
    FROM 
     trans_per_hr_2013_06_16 

    ) t 
GROUP BY t.service_name,t.function_name,hour(t.Date); 

Большое спасибо ...

+3

Правильный ответ: иметь одну таблицу с столбцом даты. Я настоятельно рекомендую вам как можно скорее отказаться от вашего текущего дизайна таблицы. – Bohemian

+0

большое спасибо, я разработал новый стол, и операции были намного проще делать с ними. – tkyass

ответ

1

Ваш запрос выглядит, как он должен возвращаться, что вы хотите.

Одним из возможных вопросов является тип столбца даты. Как показано на выходе, похоже, что он может быть сохранен как строка символов, а не дата. Если это так, для оператора group by будет выполняться следующее (предполагается, что формат указан так: DD-MM-YY H).

GROUP BY t.service_name,t.function_name, right(t.Date, 2); 

Как отмечает Богемиан в комментарии, это не хорошая структура данных. У вас есть параллельные таблицы и, вы сохраняете дату как в имени таблицы, так и в столбце. Вы должны узнать о разбиении таблиц. Это способ, которым вы можете хранить разные дни в разных файлах, но все же MySQL интерпретирует их как одну таблицу. Вероятно, это значительно упростит использование этих данных.

+0

Большое спасибо, кажется, что они в символьном формате. ваше заявление действительно помогло. ценить это. – tkyass