所以,我对 SQL 查询有疑问。
这是关于获取德国城市的天气数据。我有 4 个表:staedte(主键为 loc_id 的城市)、gehoert_zu(包含城市键和离该城市最近的气象站的键(stations_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
我正在尝试做的是在指定日期(可能是整月或一天)获取具有(例如)最高温度的城市名称。由于天气数据是和一个站绑定的,所以我实际上需要获取站的ID,然后选择与该站对应的城市之一。一个可能的问题是:“6 月份哪个城市最热?” 比如说,测得的最高温度是在 10224 号站。因此,我想得到城市 Asch。到目前为止我得到的是这个
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)花费的时间太长了。表格不是那么大(城市有大约 70k 条目),但它需要 1 到 7 分钟才能完成(取决于时间跨度)2)它总是产生同一个城市,我很确定它不是对的一个。
我希望我能够足够清楚地解释我的问题,并且我很乐意提供任何帮助。提前致谢 !:D