我有两个表,一个国家表和一个天气表。我想检索过去15天内没有下雨的所有国家的名称。SQL查询 - 仅当值落在“最后n条记录”范围内时才获取行(特定记录)
天气表有一个名为“DayNum”的列,该列从1 - >无穷大,每天增加1,这是唯一的。此表格还有一个名为“Rain”的列,它只是布尔值为0或1.
此外,并非所有国家都在同一天添加,因此每个国家/地区的最大DayNum会有所不同。下面的表
例子(数据被剪断的可读性):
国家
ID Name
1 USA
2 Cananda
3 Brazil
天气
ID Country_id DayNum Rain
1 1 1 0
2 1 2 0
3 1 3 1
这里是(这方面的工作我在查询当前的尝试几天):
SELECT countries.name, weather.daynum
FROM countries INNER JOIN weather ON countries.id = weather.country_id
GROUP BY countries.name
HAVING weather.daynum > (MAX(weather.day_num) - 15) AND SUM(weather.rain) = 0;
我认为这应该工作,但我有严重的性能问题。我需要编写的实际查询处理不同的数据(相同的确切概念)和数百万行。这个查询似乎以指数速度变慢。
任何人都可以提供任何建议吗?
我的另一个想法是以某种方式限制JOIN只抓取前15条记录(而ORDERING BY weather.day_num),但我还没有找到一种方法在JOIN中完成此操作(如果甚至可能的话) 。
我需要熟悉declare和BEGIN ... END,但我不认为这会起作用,因为我所有的国家都有不同的最大DayNum(我想我的例子在这个意义上有点微弱)。所以,如果美国是在任何其他国家前15天加入的,我想我会得到不好的结果。我已经更新了我的OP来反映这一点。 – 2012-07-30 14:40:56
我只会优化出最大值(daynum),因为我认为他们会一样的......我将编辑回 – podiluska 2012-07-30 14:44:13