カテゴリー
Database

SQL ○○別に最新レコードを抽出

例えば、顧客別に最新取引レコードを取り出すような場合のSQL文。

テーブル例

CREATE TABLE Cases (
    id                   int NOT NULL AUTO_INCREMENT,
    subject              text,
    customer_id          int,
    created_date         datetime,
  PRIMARY KEY (`id`)
) AUTO_INCREMENT = 1;

テーブルに格納されているデータ例

mysql> SELECT * FROM Cases;
+----+---------------------------+-------------+---------------------+
| id | subject                   | customer_id | created_date        |
+----+---------------------------+-------------+---------------------+
| 13 | aaaaa                     |           1 | 2014-10-29 11:47:51 |
| 14 | bbbbb                     |           1 | 2014-10-29 11:48:46 |
| 16 | vcvzxcvzxc                |           1 | 2014-10-30 17:32:50 |
|  6 | 雪で車が動かない          |           4 | 2014-02-26 12:46:16 |
|  8 | カーポートがつぶれた      |           4 | 2014-02-26 13:10:03 |
| 15 | cccc                      |           4 | 2014-10-29 13:17:35 |
|  5 | 電話機の故障              |           5 | 2014-02-26 10:25:56 |
|  9 | 30秒後以内              |           5 | 2014-02-26 13:25:48 |
| 11 | 11111                     |           6 | 2014-10-28 17:48:56 |
| 10 | aaaa                      |          11 | 2014-10-28 17:46:42 |
|  7 | aaa                       |          17 | 2014-02-26 13:06:00 |
| 12 | aaaaaaaa                  |          18 | 2014-10-28 17:49:44 |
+----+---------------------------+-------------+---------------------+

顧客ID別に作成日が最新のレコードを抽出するSQL文

mysql> SELECT * FROM Cases WHERE Cases.created_date = (SELECT MAX(c.created_date) FROM Cases AS c WHERE Cases.customer_id = c.customer_id);
+----+---------------------------+-------------+---------------------+
| id | subject                   | customer_id | created_date        |
+----+---------------------------+-------------+---------------------+
| 16 | vcvzxcvzxc                |           1 | 2014-10-30 17:32:50 |
| 15 | cccc                      |           4 | 2014-10-29 13:17:35 |
|  9 | 30秒後以内              |           5 | 2014-02-26 13:25:48 |
| 11 | 11111                     |           6 | 2014-10-28 17:48:56 |
| 10 | aaaa                      |          11 | 2014-10-28 17:46:42 |
|  7 | aaa                       |          17 | 2014-02-26 13:06:00 |
| 12 | aaaaaaaa                  |          18 | 2014-10-28 17:49:44 |
+----+---------------------------+-------------+---------------------+

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください