我有兩個表,一個國家表和一個天氣表。我想檢索過去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