2016-05-21 2 views
0

Редактировать для уточнения:PHP, MySQL. Минимальное и максимальное значение день, месяц и год

Это мой стол:

ID  Datetime   Date  Temp 
6043 2016-05-24 10:20:00 2016-05-24 19.3 
6042 2016-05-24 10:15:00 2016-05-24 19.1 
6041 2016-05-24 10:10:00 2016-05-24 19.1 
6040 2016-05-24 10:05:00 2016-05-24 19.1 

То, что я пытаюсь сделать, это выбрать строку с наибольшим «Temp».

Это мой запрос:

SELECT max(temp) as maxtemp FROM weatherdata WHERE day(date) = 24 

Запрос только дает мне maxtemp, как я могу получить ID и DATETIME?

цели получить максимальную стоимость, за каждый день в моей таблице (КУДА день (дата) = ая)

С наилучшими пожеланиями

+0

_ «Но это не работает» означает что? Каков результат? Что вы ожидаете от выхода? Вы получили сообщение об ошибке? – Jeff

+0

Я бы ожидал, что вы получите только результат _IF_, этот конкретный день является самым горячим в вашей базе данных. Это то, что вы ищете. – Jeff

+0

Привет, Джефф, спасибо за ваш комментарий. Я не получаю никакого вывода в браузере, а также нет ошибки, так как мой администратор отключил это. Hmm ok к вашему второму комментарию, тогда, как я могу получить значения max и min? – droid

ответ

0

Она смотрит на меня, как вы пытаетесь получить всю weatherdata наблюдательный ряд для наблюдения, который содержит самую высокую температуру в любой конкретный месяц.

Это происходит в два этапа, как вы поняли. Первый шаг: найти максимальное наблюдение температуры в каждом месяце. Вы делаете это так:

   SELECT MAX(temp) temp, LAST_DAY(`datetime`) month_ending 
       FROM weatherdata 
       GROUP BY LAST_DAY(`datetime`) 

Хитрость здесь заключается в использовании LAST_DAY(), чтобы выяснить, в каком месяце происходит каждое наблюдение. Он берет любую дату, дату или время, и указывает дату последнего дня своего месяца. Этот запрос дает вам набор результатов, содержащий один временной интервал в месяц, для самого высокого темпа в месяце. Попробуй. Убедитесь, что он работает для вас.

Далее, вы должны присоединиться к этому вашей детальной таблице наблюдения, например, так:

SELECT w.* 
    FROM weatherdata w 
    JOIN (
       SELECT MAX(temp) temp, LAST_DAY(`datetime`) month_ending 
       FROM weatherdata 
       GROUP BY LAST_DAY(`datetime`) 
     ) m ON w.temp = m.temp 
      AND LAST_DAY(w.`datetime`) = m.month_ending 
    ORDER BY w.`datetime` 

Это даст вам подробные замечания. Обратите внимание, что если самая высокая температура произошла в течение нескольких наблюдений за любой месяц, вы получите их все.

Наконец, если вы хотите только несколько месяцев, поставить это ИНЕКЕ прямо перед ORDER BY п

WHERE `datetime` >= '2016-04-01 
    AND `datetime` < '2016-05-01 -- to get April 2016 

Pro совет: не использовать имена типов данных, как datetime, как имена столбцов. Это затрудняет работу с вашей базой данных.

+0

Спасибо Олли. Это больше SQL, чем я понимаю, я сохраню его и вернусь к нему, когда буду больше в SQL. – droid

+1

О, я забыл, вы можете указать мне на чтение, которое поможет мне понять ваш пример? Я могу заставить его работать, но я предпочитаю понимать, а не просто копировать/вставлять-оставлять его :) Я вижу, что мне нужно погрузиться в группировку и соединение, и? Я не только желаю max/min в течение месяца, но и для каждого отдельного дня и года. С уважением – droid

+0

Запросы с 'GROUP BY' называются * aggregate * запросами. Функции 'JOIN' - это то, что они говорят. Вы можете посмотреть эти вещи. Я попытался сломать свой ответ, чтобы сначала получить зависание агрегированного запроса, а затем операцию соединения. Учебники Codecademy и Khan имеют учебники по SQL. Друзья не рекомендуют W3Schools друзьям. Это замечательно **, что вы пытаетесь понять, а не просто использовать SO-ответ как волшебное заклинание. –

Смежные вопросы