У меня проблемы с написанием запроса, который выполняет внутреннее соединение.
В моей таблице базы данных есть столбцы Дата, Высокая температура, Низкая температура. Я хочу рассчитать такие вещи, как самая высокая температура по месяцам в году, извлекая дату, когда они произошли одновременно. Это отлично работает, используя запрос ниже:
SELECT ds.Date,
MONTH(ds.Date) AS Month,
ds.HighTemperature
FROM WeatherData.DailyStats ds
INNER JOIN (SELECT MONTH(Date) AS Month,
Date,
MAX(HighTemperature) AS HighTemperature
FROM WeatherData.DailyStats GROUP BY Month) ds2
ON MONTH(ds.Date) = MONTH(ds2.Date) AND ds.HighTemperature = ds2.HighTemperature
ORDER BY MONTH(ds.Date), ds.DATE ASC
Это дает мне 12 строк, по одной на каждый месяц в году. Каждая строка содержит номер месяца, самую высокую температуру, зафиксированную в этом месяце, и дату, когда она возникла.
Теперь, когда у меня нет никаких успехов, это когда я пытаюсь сделать что-то немного более сложное - вместо того, чтобы запускать запрос непосредственно на HighTemperature, я хочу найти самые высокие дневные диапазоны температур для каждого месяца, то есть получить такие же результаты для (HighTemperature - LowTemperature) AS TemperatureRange .
Как я могу изменить запрос для этого?
@SloanThrasher Дата в подзапросе используется в операторе соединения ON. Также я не могу просто заменить свою формулу, потому что часть ds.HighTemperature = ds2.HighTemperature больше не работает должным образом, поскольку нет столбца ds.TemperatureRange






Ах, понял!
Проблема, с которой я столкнулся, заключалась в том, что в операторе ON я пытался сгруппировать на TemperatureRange = ds2.TemperatureRange, где TemperatureRange был получен из первого запроса.
Вместо этого, если я заменю его на ds.HighTemperature - ds.LowTemperature = ds2.TemperatureRange, все будет хорошо!
Одна проблема, с которой вы можете столкнуться, заключается в том, что когда две даты имеют одинаковую высокую температуру в одном месяце, вы получите две выходные строки для этого месяца. В этом отношении может помочь добавление подходящей группы. Что касается получения того же самого для диапазона температур, вы сможете получить это, просто заменив HighTemperature на свою формулу. Но, опять же, для получения правильных результатов вам нужно добавить группу до. Кроме того, столбец даты в подвыборке не имеет значения и, поскольку нет группировки по, неточен.