MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで日付カラムから最新日付のレコードを取得する方法【MAX()とサブクエリの使い方】

MySQLで最も新しい日付を持つレコードを検索するには?

テーブルの中から最も新しい日付(最新日)を取得したい場合は、集計関数 MAX() をサブクエリと組み合わせて使うのが効果的です。この記事では、実際にテーブルを作成し、日付型(DATE)のカラムから最新日付に該当するレコードを取り出す手順を、具体的なSQL例とともに解説します。

1. サンプルテーブルの作成

まず、以下のようにテーブルを作成します。Idは自動採番の主キー、ExpiryDateは日付型のカラムです。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ExpiryDate date
);
Query OK, 0 rows affected (1.40 sec)

2. テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。

mysql> insert into DemoTable(ExpiryDate) values('2018-12-31');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ExpiryDate) values('2019-09-01');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(ExpiryDate) values('2019-09-01');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(ExpiryDate) values('2016-08-30');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ExpiryDate) values('2019-06-23');
Query OK, 1 row affected (0.17 sec)

3. 登録されたレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable;

実行結果は以下の通りです。

+----+------------+
| Id | ExpiryDate |
+----+------------+
|  1 | 2018-12-31 |
|  2 | 2019-09-01 |
|  3 | 2019-09-01 |
|  4 | 2016-08-30 |
|  5 | 2019-06-23 |
+----+------------+
5 rows in set (0.00 sec)

4. 最新日付のレコードを抽出するクエリ

ここが本題です。WHERE句の中でサブクエリとして MAX(ExpiryDate) を使うことで、「テーブル内で最も新しい日付」と等しいレコードだけを取り出せます。

mysql> select * from DemoTable
    where ExpiryDate=(select max(ExpiryDate) from DemoTable);

実行結果を見てみましょう。挿入したデータの中で最も新しい日付は「2019-09-01」なので、該当する2件のレコードが返されます。

+----+------------+
| Id | ExpiryDate |
+----+------------+
|  2 | 2019-09-01 |
|  3 | 2019-09-01 |
+----+------------+
2 rows in set (0.00 sec)

ポイントまとめ

  • MAX()関数:指定したカラムの最大値(日付なら最も新しい日付)を返す集計関数です。
  • サブクエリ:WHERE句内で最大日付を先に求め、それに一致する行を本体のSELECT文が取得します。
  • 複数該当にも対応:同じ最新日付のレコードが複数あっても、すべて取得できるのがこの方法の利点です。LIMIT 1を使う方法だと1件しか取れないため、用途に応じて使い分けましょう。

なお、逆に最も古い日付を取得したい場合は、MAX()MIN() に置き換えるだけで同じ考え方で対応できます。

  1. 比較演算子はMySQLの日付値とどのように連携しますか?

    MySQLにおける日付値の比較演算の仕組みMySQLでは、日付同士を比較する際、比較演算子は論理的な方法で機能します。内部的には、MySQLは日付値を単純に数値または文字列として扱い、その大小関係を評価しています。例えば「YYYYMMDD」形式の日付は、そのまま整数として比較されるため、直感的に理解しやすい結果が得られます。比較結果がFALSEになる例次の例では、2つの日付を「<」(小なり)演算子で比較しています。このとき、MySQLは両者を数値として単純に比較します。mysql> select 20171027 < 20150825; +------------------

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected