Учитывая, что у меня есть следующая таблица
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
Заранее спасибо!
вы можете использовать ниже запрос
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)
Вы близки. Существует несколько способов сделать это, но простая ревизия вашего запроса заключается в использовании коррелированного подзапроса:
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()
вместо строковой манипуляции.