Итак, у меня проблема с SQL Query.Как использовать функцию MAX в трех таблицах?
Речь идет о получении данных о погоде для городов Германии. У меня есть 4 таблицы: staedte (города с основным ключом loc_id), gehoert_zu (содержит ключ города и ключ метеостанции, ближайшей к этому городу (station_id)), wettermessung (содержит всю информацию о погоде и информацию о станции ключевое значение) и wetterstation (содержит ключ и местоположение станций). И я использую PostgreSQL
Вот как таблица выглядит следующим образом:
wetterstation
s_id[PK] standort lon lat hoehe
----------------------------------------
10224 Bremen 53.05 8.8 4
wettermessung
stations_id[PK] datum[PK] max_temp_2m ......
----------------------------------------------------
10224 2013-3-24 -0.4
staedte
loc_id[PK] name lat lon
-------------------------------
15 Asch 48.4 9.8
gehoert_zu
loc_id[PK] stations_id[PK]
-----------------------------
15 10224
То, что я пытаюсь сделать, это получить название города с (например) самым высокой температурой при (может быть целый месяц или день). Поскольку данные о погоде привязаны к станции, мне действительно нужно получить идентификатор станции, а затем просто выбрать один из соответствующих городов станции. Возможный вопрос: «В каком городе он был самым жарким в июне?» и, скажем, самая высокая измеренная температура была на станции номер 10224. В результате я хочу получить город Аш. То, что я получил до сих пор это
SELECT name, MAX (max_temp_2m)
FROM wettermessung, staedte, gehoert_zu
WHERE wettermessung.stations_id = gehoert_zu.stations_id
AND gehoert_zu.loc_id = staedte.loc_id
AND wettermessung.datum BETWEEN '2012-8-1' AND '2012-12-1'
GROUP BY name
ORDER BY MAX (max_temp_2m) DESC
LIMIT 1
Есть две проблемы, связанные с результатами: 1) он принимает Waaaay слишком долго. Таблицы не такие большие (в городах есть около 70 тыс. Записей), но для достижения этой цели требуется от 1 до 7 минут. (44) правый.
Надеюсь, мне удалось достаточно ясно объяснить мою проблему, и я был бы рад за любую помощь. Заранее спасибо ! : D
Вы используете 'LIMIT 1', поэтому вы всегда будете возвращать одну строку, и вы заказываете данные с помощью' max', поэтому вы всегда будете возвращать одну и ту же строку. Если вы удалите 'LIMIT 1', вы получите все строки, которые вы ожидаете. – Taryn
Ну, данные о погоде привязаны к станции, а затем к станции, поэтому у меня есть около 1000 городов для каждой станции. Если я удалю предел, я получаю все города, которые привязаны к этой станции, но данные одинаковы для всех из них. – smeshko
Мое предложение состояло в том, чтобы отредактировать исходное сообщение с некоторыми примерами данных для каждой таблицы и желаемым результатом. – Taryn