Помогите настроить мой MySQL оператор для получения желаемого запроса - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть следующее утверждение mysql, в основном делающее то, что я хочу, за исключением одной вещи.

SELECT 
a.tmc, w.date, ROUND(AVG(a.surface_temperature), 0) surface_temperature, ROUND(AVG(a.air_temperature), 0) air_temperature, 
ROUND(AVG(a.material_rate),0) material_rate, 
Time_Format(w.time, '%H:00') as time, 
ROUND(AVG(w.intensity), 0) intensity, 
FROM application a 
LEFT OUTER JOIN weather w ON a.DATE = w.DATE AND a.tmc = w.tmc 
WHERE w.DATE = '" & calendar1.SelectedDate & "' 
AND w.event= '" & weatherType.SelectedItem.Value & "' 
AND w.City = '" & sender.CssClass & "' 
GROUP BY time

Это производит: enter image description here

Это нормально, но проблема в том, что в каждом месте есть несколько TMC (Думайте о TMC как о пожарных станциях в городе. В больших городах есть несколько TMC

Что мне нужно сделать, так это усреднить все, как это происходит в час, но делать это для каждого tmc, а не только для первого tmc, который появляется на основе времени и других отфильтрованных критериев.

Я собрал оба:

GROUP BY TIME AND TMC

and

GROUP BY TMC

но они оба предоставляют только 1 раз и 1 местоположение.

Как мне нужно настроить это утверждение, чтобы оно вытягивало среднее значение всех этих критериев в час на tmc?

Я хочу что-то со следующим выводом:

Time TMC       Temp
4:00 107+4807   27
4:00 108+3352   32
5:00 107+4807   28
5:00 105+2274   28

Надеюсь, это имеет смысл

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Я думаю, вам нужно разделить их запятыми:

GROUP BY time, tmc

Возможно, на странице руководства для оператора SELECT не все так ясно :

[GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]

т. Е. Вы можете указать несколько столбцов для формирования более гранулярных групп.

При указании логической комбинации, например

GROUP BY TIME AND TMC

, может показаться, что все работает, но созданные группы будут зависетьна «логическом» значении времени и tmc - вы получите группу для строк, где оба будут отображаться как «true», и группу для всего остального.

1 голос
/ 16 сентября 2011

Да, запятая разделяет группу по значениям.Первый займет приорты.Таким образом, если вы сказали GROUP BY TIME, TMC, он сгруппировался бы по TIME, а где TIME - то же самое, он сгруппировался бы по TMC

...