2012-01-05 30 views
1

假設一個這樣的表。選擇使用max時返回錯誤的編號

id town_id begin_date 

12 2  2011-10-10 
23 2  2011-11-10 
43 2  2012-01-01 

現在,如果我做

SELECT id, MAX(begin_date) AS mx 
FROM regions 

以上查詢返回的最大日期,但該ID是錯誤的:

id mx 
12 2012-01-01 

這個預期?
我怎樣才能得到它回到正確的ID(43,2012-01-01)

+0

您的查詢返回正是你問它返回:凡是'ID'它正好想選擇(因爲沒有'ORDER BY'或其他爲'ID'指定的標準),然後是最高值'begin_date'列。 – 2012-01-05 02:37:09

+0

如果兩個城鎮有相同的日期會發生什麼? – rejj 2012-01-05 07:38:47

回答

3

你忘了GROUP BY條款:

SELECT id, MAX(begin_date) AS mx 
FROM regions 
GROUP BY 1 
+1

+1,但請不要鼓勵GROUP BY 語法。 :)當查詢將其他列添加到「SELECT」語句或「JOIN」或其他涉及的內容時,它使得以後很難閱讀或維護。它更清晰(對於需要處理代碼的下一個人來說更好),以便在「GROUP BY」中指定列名。 :) – 2012-01-05 02:38:56

+1

當我添加GROUP BY 1時,我最終得到多個記錄... – 2012-01-05 03:12:05

+0

也許你想'SELECT鎮,MAX(begin_date)...'? – Bohemian 2012-01-05 04:01:48

3

如果你正在嘗試做的就是相關的標識與MAX()日期,那麼你可以做:

SELECT id, begin_date from regions order by begin_date DESC LIMIT 1;