Выберите максимум, сгруппированный по годам

0

Учитывая, что у меня есть следующая таблица

WindDirection | WindSpeed | Date
            W |       12  | 17/01/14
          NNW |       20  | 20/02/14
           SE |       15  | 30/04/14
          ENE |       25  | 21/06/15
          NNE |       23  | 10/12/15
          WSW |       8   | 07/01/15
            S |       19  | 05/06/15

Как я могу получить максимум каждый год? Я хотел бы достичь этого

Year | WindSpeed | WindDirection
2014 |        20 |           NNW
2015 |        25 |           ENE

Это мой запрос, он не работает, просто у вас есть идея

SELECT CONCAT("20", SUBSTRING('Date', -2)) AS 'Year', 'WindSpeed', 'WindDirection'
FROM 'weather'
WHERE 'WindSpeed' = (SELECT MAX('WindSpeed') 
                     FROM 'weather')
GROUP BY 'Year' DESC

Заранее спасибо!

Теги:

2 ответа

2
Лучший ответ

вы можете использовать ниже запрос

SELECT  B.Year ,
    WindSpeed ,
    A.WindDirection
FROM    weather A
    INNER JOIN ( SELECT YEAR ,
                        MAX(WindSpeed) AS WindSpeed
                 FROM   ( SELECT    YEAR(Date) AS YEAR ,
                                    WindSpeed ,
                                    WindDirection
                          FROM      weather
                        ) A
                 GROUP BY YEAR
               ) b ON A.WindSpeed = b.WindSpeed
                      AND B.YEAR = YEAR(A.Date)
2

Вы близки. Существует несколько способов сделать это, но простая ревизия вашего запроса заключается в использовании коррелированного подзапроса:

SELECT CONCAT('20', RIGHT('Date', 2)) AS 'Year', 'WindSpeed', 
'WindDirection'
FROM 'weather' w
WHERE w.WindSpeed = (SELECT MAX(w2.WindSpeed) 
                     FROM weather w2
                     WHERE RIGHT(w2.'Date', 2) = RIGHT(w.'Date', 2)
                    )
GROUP BY 'Year' DESC;

Примечание. Кажется, вы сохраняете дату в виде строки. Вы не должны этого делать, потому что MySQL предлагает правильные типы данных даты и времени. Если он хранится в качестве date, используйте функцию year() вместо строковой манипуляции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню