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

MySQLで複数のタイムスタンプの中から最新の日付を選択する方法

MySQLでは、ORDER BY句を使うことで、複数のタイムスタンプの中から最新の日付(最も新しい日時)を持つレコードを簡単に取得できます。

基本構文

最新の日付を選択するための基本的な構文は以下の通りです。タイムスタンプのカラムを降順(DESC)に並べ替え、先頭の1件だけを取得します。

SELECT yourColumnName1, yourColumnName2, ...N
FROM yourTableName
ORDER BY yourTimestampColumnName DESC
LIMIT 1;

サンプルテーブルの作成

それでは、実際に動きを確認するためにテーブルを作成してみましょう。以下のクエリでテーブルを作成します。

mysql> create table MostRecentDateDemo
    - > (
    - > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    - > Name varchar(10),
    - > ShippingDate timestamp
    - > );
Query OK, 0 rows affected (0.65 sec)

このテーブルには、Id(主キー)、Name(名前)、ShippingDate(出荷日時)の3つのカラムが定義されています。

テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。あえて日時をバラバラに設定することで、最新の日付が正しく取得できるかを確認しやすくなります。

mysql> insert into MostRecentDateDemo(Name,ShippingDate) values('Larry',date_add(now(),interval -1 month));
Query OK, 1 row affected (0.19 sec)
mysql> insert into MostRecentDateDemo(Name,ShippingDate) values('Mike','2018-09-12 19:34:45');
Query OK, 1 row affected (0.43 sec)
mysql> insert into MostRecentDateDemo(Name,ShippingDate) values('Sam','2017-11-24 14:30:40');
Query OK, 1 row affected (0.19 sec)
mysql> insert into MostRecentDateDemo(Name,ShippingDate) values('Carol','2019-02-12 11:30:41');
Query OK, 1 row affected (0.56 sec)
mysql> insert into MostRecentDateDemo(Name,ShippingDate) values('David',now());
Query OK, 1 row affected (0.22 sec)
mysql> insert into MostRecentDateDemo(Name,ShippingDate) values('John','2018-12-31 12:59:58');
Query OK, 1 row affected (0.15 sec)

ここで、date_add(now(), interval -1 month)は現在日時から1か月前の日時を生成する関数、now()は実行時点の現在日時を返す関数です。

登録データの確認

SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。

mysql> select *from MostRecentDateDemo;

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

+----+-------+---------------------+
| Id | Name  | ShippingDate        |
+----+-------+---------------------+
|  1 | Larry | 2019-01-14 17:17:08 |
|  2 | Mike  | 2018-09-12 19:34:45 |
|  3 | Sam   | 2017-11-24 14:30:40 |
|  4 | Carol | 2019-02-12 11:30:41 |
|  5 | David | 2019-02-14 17:19:34 |
|  6 | John  | 2018-12-31 12:59:58 |
+----+-------+---------------------+
6 rows in set (0.00 sec)

最新の日付を取得するクエリ

いよいよ、ShippingDateカラムをもとに最新の日付を持つレコードを取得します。ORDER BYで降順に並べ替え、LIMIT 1で先頭の1件のみを取り出します。

mysql> select Id,Name,ShippingDate from MostRecentDateDemo order by ShippingDate desc limit 1;

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

+----+-------+---------------------+
| Id | Name  | ShippingDate        |
+----+-------+---------------------+
|  5 | David | 2019-02-14 17:19:34 |
+----+-------+---------------------+
1 row in set (0.00 sec)

このように、最も新しい出荷日時「2019-02-14 17:19:34」を持つDavidのレコードが正しく取得できました。

補足:MAX関数を使う方法

最新の日付そのものだけが必要な場合は、集計関数のMAX()を使う方法もあります。

mysql> select max(ShippingDate) from MostRecentDateDemo;

MAX()は該当カラムの最大値(=最新の日時)を1つだけ返すため、「最新の日付の値」だけが欲しい場合にシンプルで便利です。一方、最新の日付を持つ行全体(IdやNameなど他のカラムも含む)を取得したい場合は、本記事で紹介したORDER BY 〜 DESCとLIMIT 1を組み合わせる方法が適しています。

  1. MySQLで指定した日付(2010-11-04)から現在の日付までのレコードを抽出する方法

    MySQLでは、比較演算子 >= を使うことで、特定の日付から現在までの範囲にあるレコードを簡単に抽出できます。この記事では、サンプルテーブルの作成からデータの挿入、そして指定日(2010-11-04)以降のデータを取得するクエリまで、実際の実行例とともに順を追って解説します。1. テーブルの作成まず、日付型(DATE)カラムを持つテーブルを作成しましょう。mysql> create table DemoTable ( Joiningdate date ); Query OK, 0 rows affected (0.56 sec)2. レコードの挿入INSERTコマンドを使

  2. MySQLクエリで「Empty set」を別の値に置き換える方法

    MySQLでは、該当するレコードが存在しない場合に返されるNULL値を、COALESCE関数を使って別の値に置き換えることができます。検索結果が空になったときに、デフォルト値を表示させたい場面で非常に便利です。COALESCE関数とはCOALESCEは、引数として渡された複数の値の中から、最初にNULLではない値を返す関数です。集計関数(MAXやSUMなど)の結果がNULLになるケースでは、第2引数で指定した代替値が代わりに返されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable -> ( -&