標準出力

新しいもの、変わらないこと 自分の頭を通して考えてみました (stdout)

最大値を持つレコードの抽出

下記のようなDATETIME型のレコードを格納したテーブル(atndRecords)に対して

+------+---------------+---------------------+---------------------+
| id   | name          | comeTime            | leaveTime           |
+------+---------------+---------------------+---------------------+
| 2971 | 鈴木 三郎    | 2013-01-29 08:55:00 | 2013-01-29 21:17:00 |
| 3746 | 一宮 三郎    | 2013-01-29 08:55:00 | 2013-01-29 19:56:00 |
| 3374 | 井頭 一郎    | 2013-01-29 08:56:00 | 2013-01-29 18:18:00 |
| 3343 | 佐々木 五郎 | 2013-01-29 08:56:00 | 2013-01-29 17:53:00 |
| 2909 | 鈴木 一郎    | 2013-01-29 08:56:00 | 2013-01-29 17:46:00 |
| 3498 | Harry Potter     | 2013-01-29 08:58:00 | 2013-01-29 22:02:00 |
| 3188 | 佐藤 五郎    | 2013-01-29 09:00:00 | 2013-01-29 20:37:00 |
| 3715 | 一宮 二郎    | 2013-01-29 09:59:00 | 2013-01-29 18:14:00 |
                             …
+------+------------------+---------------------+---------------------+

comeTimeが最大(一番遅い)のレコードを抽出するには、サブクエリを使って

select * from atndRecords where comeTime = ( select max(comeTime) from atndRecords);

とすればよい。なお、comeTimeの任意範囲内での最大値を持つレコードを抽出したいい場合は、

select * from atndReocrds where comeTime = ( select max(comeTime) from atndRecords where comeTime >= 2013-01-29 and comeTime < 2013-01-30 );

とサブクエリのwhere句内で範囲を指定すればいい。