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() に置き換えるだけで同じ考え方で対応できます。
-
比較演算子はMySQLの日付値とどのように連携しますか?
MySQLにおける日付値の比較演算の仕組みMySQLでは、日付同士を比較する際、比較演算子は論理的な方法で機能します。内部的には、MySQLは日付値を単純に数値または文字列として扱い、その大小関係を評価しています。例えば「YYYYMMDD」形式の日付は、そのまま整数として比較されるため、直感的に理解しやすい結果が得られます。比較結果がFALSEになる例次の例では、2つの日付を「<」(小なり)演算子で比較しています。このとき、MySQLは両者を数値として単純に比較します。mysql> select 20171027 < 20150825; +------------------
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected