2012-01-05 4 views
1

このようなテーブルを仮定します。私はmaxを使用するとselectが間違ったIDを返す

SELECT id, MAX(begin_date) AS mx 
FROM regions 

をすれば

id town_id begin_date 

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

は今、上記のクエリは、最大の日付を返しますが、idが間違っている:これは

id mx 
12 2012-01-01 

期待されていますか?
は、私はそれが正しいID(43、2012年1月1日)

+0

あなたのクエリは、返すようにそれを尋ねまさに戻っている:なし 'ORDER BY'または他はありませんので、(選択したいことを起こるものは何でも' ID' 'ID'のために指定された基準)、 'begin_date'カラム。 –

+0

2つの町の日付が同じであればどうなりますか? – rejj

答えて

3

あなたはGROUP BY句を忘れてしまっを返す方法を取得することができます。

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

+1しかし、GROUP BY の構文を奨励してはいけません。 :)これは、クエリが 'SELECT'ステートメントに追加された他のカラムを取得するか、' JOIN'か何か他のものが関わるようになると、後で読むか維持するのが本当に難しくなります。代わりに 'GROUP BY'の中で列名を指定するのがはっきりしています(次の人がコードを操作しなければならない方が良いです)。 :) –

+1

GROUP BY 1を追加すると、複数のレコードを取得することになります... –

+0

「SELECT town、MAX(begin_date)...」が必要なのでしょうか? – Bohemian

3

何をやろうとしていることに関連するIDを取得する場合にはMAX()日付で、その後、あなたが行うことができます:

SELECT id, begin_date from regions order by begin_date DESC LIMIT 1; 
関連する問題