【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 を組み合わせるだけで実現できます。シンプルながら実務でもよく使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLでレコードを挿入しながら日付をフォーマットする方法(DATE_FORMAT活用)
MySQLでは、INSERT文の中でDATE_FORMAT()関数を使うことで、レコードを挿入する際に日付を任意の形式に整形できます。本記事では、実際にテーブルを作成し、日付をフォーマットしながらデータを挿入する手順を具体的なSQL例とともに解説します。1. テーブルの作成まず、フォーマット済みの日付文字列を格納するためのテーブルを作成します。ここでは、VARCHAR型のカラム「ShippingDate」を持つシンプルなテーブルを用意します。mysql> create table DemoTable2012 -> ( -> ShippingDate varch
-
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 -> (