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

【MySQL】現在の日付に一致する重複レコードを1件だけ表示する方法

はじめに

MySQLで「現在の日付に一致するレコードを検索したい。ただし、同じ日付のレコードが複数存在しても、結果は1件だけ表示したい」というケースがあります。このような場合は、LIMIT句を使うことで簡単に実現できます。

本記事では、具体例を交えながら手順を解説します。なお、例として現在の日付が以下であると仮定します。

2019-10-02

1. テーブルを作成する

まず、日付を格納するカラムを持つテーブルを作成します。

mysql> create table DemoTable1450
    -> (
    -> DueDate date
    -> );
Query OK, 0 rows affected (0.63 sec)

2. レコードを挿入する

INSERT文を使って、テスト用のデータをいくつか登録します。同じ日付「2019-10-02」を3件挿入している点に注目してください。

mysql> insert into DemoTable1450 values('2019-09-30');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1450 values('2019-10-02');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1450 values('2019-10-02');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1450 values('2019-10-02');
Query OK, 1 row affected (0.30 sec)

3. すべてのレコードを確認する

SELECT文でテーブル内の全レコードを表示してみましょう。

mysql> select * from DemoTable1450;

実行結果は以下の通りです。同じ日付が重複して存在していることがわかります。

+------------+
| DueDate    |
+------------+
| 2019-09-30 |
| 2019-10-02 |
| 2019-10-02 |
| 2019-10-02 |
+------------+
4 rows in set (0.00 sec)

4. 重複する一致レコードを1件だけ表示する

ここで本題のクエリです。CURDATE()関数で現在の日付と一致するレコードを抽出し、LIMIT 1を付けることで、結果を1件のみ表示するようにしています。

mysql> select * from DemoTable1450 where DueDate=curdate() limit 1;

実行結果:

+------------+
| DueDate    |
+------------+
| 2019-10-02 |
+------------+
1 row in set (0.00 sec)

このように、条件に一致するレコードが複数あっても、最初の1件だけが返されることが確認できました。

補足:DISTINCTとの使い分け

なお、「重複を排除した一覧をすべて取得したい」場合には、LIMITではなくDISTINCTを使用します。

mysql> select distinct DueDate from DemoTable1450 where DueDate=curdate();
  • LIMIT 1: 一致するレコードの中から最初の1件だけを取得したい場合
  • DISTINCT: 一致する日付の種類をすべて(重複なしで)取得したい場合

用途に応じて適切な方法を選択してください。

まとめ

MySQLで現在の日付に一致する重複レコードを1件だけ表示したい場合は、WHERE句で CURDATE() による絞り込みを行い、LIMIT 1 を組み合わせるだけで実現できます。シンプルながら実務でもよく使われるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLでレコードを挿入しながら日付をフォーマットする方法(DATE_FORMAT活用)

    MySQLでは、INSERT文の中でDATE_FORMAT()関数を使うことで、レコードを挿入する際に日付を任意の形式に整形できます。本記事では、実際にテーブルを作成し、日付をフォーマットしながらデータを挿入する手順を具体的なSQL例とともに解説します。1. テーブルの作成まず、フォーマット済みの日付文字列を格納するためのテーブルを作成します。ここでは、VARCHAR型のカラム「ShippingDate」を持つシンプルなテーブルを用意します。mysql> create table DemoTable2012 -> ( -> ShippingDate varch

  2. MySQLでTRUE/FALSEのレコードを0/1として表示する方法

    MySQLでTRUE/FALSEのレコードを0/1として表示する方法MySQLでは、カラムのデータ型をBOOLEANとして定義することで、TRUE/FALSEの値が自動的に0と1として表示されます。BOOLEAN型は内部的にはTINYINT(1)のエイリアスであり、TRUEは1、FALSEは0として扱われます。以下、具体的な手順を解説します。1. テーブルの作成まず、BOOLEAN型のカラムを含むテーブルを作成しましょう。mysql> create table DemoTable2035     -> (