Mysql - Агрегированная функция группировки запросов - PullRequest
0 голосов
/ 11 августа 2011

Рассмотрим следующую таблицу.


enter image description here


Я пытаюсь написать запрос для отображения - Максимальные значения для всех деталей в категории.Также отобразите дату, когда значение было макс.

Так что я попробовал это -

select Part_id, Category, max(Value), Time_Captured
from data_table
where category = 'Temperature'
group by Part_id, Category

Во-первых, mysql не выдавал ошибку за то, что Time_Captured не был сгруппирован в.Не уверен, что это проблема с mysql или my mysql.

Так что я предполагаю, что он должен вернуть -

1   Temperature 50  11-08-2011 08:00
2   Temperature 70  11-08-2011 09:00

Но он возвращает мне время, захваченное с первогозапись набора данных, т.е. 11-08-2011 07:00

Не знаю, где я иду не так.Есть мысли?

(Примечание: я запускаю это внутри виртуальной машины. На всякий случай, если что-то изменится)

1 Ответ

1 голос
/ 11 августа 2011

Вам необходимо присоединиться к результатам запроса, который находит максимальное (значение), например:

select dt.Part_id, dt.Category, dt.Value, dt.Time_Captured
from data_table dt
join (select Part_id, Category, max(Value) as Value
          from data_table group by 1, 2) x 
    on x.Part_id = dt.Part_id and x.Category = dt.Category
where dt.category = 'Temperature';

Обратите внимание, что это вернет несколько строк, если есть несколько строк с одинаковым значением максимума,

Если вы хотите ограничить это одной строкой, даже если есть несколько совпадений для max (значения), выберите max (Time_Captured) (или min (Time_Captured), если хотите), например:

select dt.Part_id, dt.Category, dt.Value, max(dt.Time_Captured) as Time_Captured
from data_table dt
join (select Part_id, Category, max(Value) as Value
          from data_table group by 1, 2) x 
    on x.Part_id = dt.Part_id and x.Category = dt.Category
where dt.category = 'Temperature'
group by 1, 2, 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...