SQL文で最新日付のみ抽出するには(最大値の抽出)
下記のようなaテーブルの中の最新日付のものをそれぞれ抽出する処理をSQL文で実行結果を出力するには、次のようにします。
SELECT MAX(日付),ID FROM aテーブル GROUP BY ID
逆にもっとも古い日付のみを出力するには次のようにします。
SELECT MIN(日付),ID FROM aテーブル GROUP BY ID
元データ aテーブル
ID | 日付 | |
---|---|---|
1 | 2010/01/01 | |
1 | 2010/01/02 | |
1 | 2010/01/03 | ※ |
2 | 2010/01/01 | |
2 | 2010/01/02 | |
2 | 2010/01/05 | ※ |
3 | 2010/01/01 | |
3 | 2010/02/02 | |
3 | 2010/03/03 | ※ |
実行結果
ID | 日付 |
---|---|
1 | 2010/01/03 |
2 | 2010/01/05 |
3 | 2010/03/03 |
ただしこれはIDが同一のものの中から最新日時を抽出するには問題がないですが、ID、日時以外のカラムがあったときにはそのカラムの値が最新日時のものになるとは限りません。
場合によっては次のようになります。(MySQL5.5で検証)
元データ aテーブル
ID | 日付 | 名前 | |
---|---|---|---|
1 | 2010/01/01 | A | |
1 | 2010/01/02 | B | |
1 | 2010/01/03 | C | ※ |
2 | 2010/01/01 | D | |
2 | 2010/01/02 | E | |
2 | 2010/01/05 | F | ※ |
3 | 2010/01/01 | G | |
3 | 2010/02/02 | H | |
3 | 2010/03/03 | I | ※ |
SELECT MAX(日付),ID,名前 FROM aテーブル GROUP BY ID
実行結果
ID | 日付 | 名前 |
---|---|---|
1 | 2010/01/03 | A |
2 | 2010/01/05 | D |
3 | 2010/03/03 | G |
関連記事
- PHPでMySQLなどにPDO接続をすると、could not find driverのエラーが出る場合
- CakePHPでカラムを比較してSELECTする方法
- データベースを定時バックアップする方法(毎日バックアップする処理)
- 複数のデータベースを切り替える方法(別データベースを使用する)
- SQLの概要、区分け
- SQL文で順位を求めるには
- SQLの昇順、降順を表すASCやDESCの言葉の由来
- Zend_DBのSELECTメソッドのまとめ
- Zend_DBの基本
スポンサーリンク