こういったデータがあります。
mysql> select * from test;
+-------+------------+
| id | date |
+-------+------------+
| room1 | 2007-10-01 |
| room1 | 2007-10-02 |
| room1 | 2007-10-03 |
| room2 | 2007-10-03 |
+-------+------------+
select * from test group by id;
とすると
+-------+------------+
| id | date |
+-------+------------+
| room1 | 2007-10-01 |
| room2 | 2007-10-03 |
+-------+------------+
この結果が返ってきますが、グループ化された集合の中で一番最初に見つかった行が返ってくるものだと思います。room1の最新日付は10/3ですが、それを出したいと思います。以下の結果になるようなSQLは書けますでしょうか?
+-------+------------+
| id | date |
+-------+------------+
| room1 | 2007-10-03 |
| room2 | 2007-10-03 |
+-------+------------+
http://dev.mysql.com/doc/refman/4.1/ja/select.html
SQLの最後に
ORDER BY id asc,date desc
をつける
今回のケースに関して言えば、
SELECT id, max(date) FROM test GROUP BY id;
でどうでしょうか。
KUROX さんの参照先を読めば、KUROXさんの方法でもできそうなのですが、こちらで試したところだめでした。ただ、
SELECT * FROM test GROUP BY id ORDER BY id ASC, date DESC;
としても、表示されたのは2件でしたが。
項目を指定したくない場合、冗長ですがインラインビューを使用して
SELECT * FROM (SELECT * FROM test_c ORDER BY id ASC, dt DESC ) AS tmp GROUP BY id;
でも、ご希望の結果がでると思います。
蛇足ですが、DBではバージョンによっても仕様が異なるので、質問時にはお使いのバージョンを提示された方が良いかと思います。
group byのうしろのorder by はgroup byした結果についての順番制御になります。2番目の表と結果が変わりません。
また、group by id asc,date desc とした場合でもdateがユニークになるためselectで表示する結果と変わりません(最初の返答はこちらと勘違いしていました)。