MySQLのDATETIME型カラムから重複しない一意の日付を表示する方法
この記事では、MySQLのDATETIME型カラムに格納された日付データの中から、DISTINCTを使って重複しない一意の値を取り出す方法を、テーブル作成から順を追って解説します。
サンプルテーブルの作成
まず、DATETIME型のカラムを持つテーブルを作成しましょう。
mysql> create table DemoTable
(
AdmissionDate datetime
);
Query OK, 0 rows affected (8.99 sec)テストデータの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。同じ日時のデータを意図的に重複させて登録しています。
mysql> insert into DemoTable values('2010-01-10 12:30:45');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2010-01-10 12:30:45');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('2010-01-10 12:30:45');
Query OK, 1 row affected (0.71 sec)
mysql> insert into DemoTable values('2010-01-12 12:30:45');
Query OK, 1 row affected (1.22 sec)
mysql> insert into DemoTable values('2010-01-20 12:30:45');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2010-01-20 12:30:45');
Query OK, 1 row affected (0.51 sec)登録されたデータの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行結果は以下の通りです。6件のレコードが登録されているのがわかります。
+---------------------+ | AdmissionDate | +---------------------+ | 2010-01-10 12:30:45 | | 2010-01-10 12:30:45 | | 2010-01-10 12:30:45 | | 2010-01-12 12:30:45 | | 2010-01-20 12:30:45 | | 2010-01-20 12:30:45 | +---------------------+ 6 rows in set (0.00 sec)
DISTINCTで重複しない日付を取得する
重複を排除して一意の値だけを表示するには、SELECT文にDISTINCTキーワードを付けた以下のクエリを実行します。
mysql> select distinct AdmissionDate from DemoTable;
実行結果は以下の通りです。重複が取り除かれ、3件の一意な日時だけが表示されました。
+---------------------+ | AdmissionDate | +---------------------+ | 2010-01-10 12:30:45 | | 2010-01-12 12:30:45 | | 2010-01-20 12:30:45 | +---------------------+ 3 rows in set (0.00 sec)
応用:時刻が違っても「日付単位」で重複を排除するには
上記のDISTINCTは、時刻も含めた完全一致でのみ重複を判定します。そのため、同じ日付でも時刻が異なるレコードは別々の行として表示されます。
時刻に関係なく「日付だけ」で一意の値を取得したい場合は、DATE()関数と組み合わせます。
mysql> select distinct DATE(AdmissionDate) AS AdmissionDateOnly from DemoTable;
このように書くことで、DATETIME値から日付部分だけが抽出され、日付単位の重複排除が可能になります。集計処理や一覧画面の表示などで非常に便利なテクニックなので、合わせて覚えておきましょう。
-
MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法
MySQLで日付をグループ化する基本 MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。 1. サンプルテーブルの作成 まず、顧客名と出荷日を格納するテーブルを作成します。 mysql> create table DemoTable2002 ( CustomerName varchar(20), CustomerShippingDate datetime ); Query OK, 0 rows affected (
-
MySQLで重複しない日付(個別の値)を表示する方法
MySQLでは、datetime型のカラムから「日付のみ」を基準に重複を排除してデータを取得したいケースがよくあります。例えば、同じ日に複数の注文や出荷記録がある場合、日付単位で1件だけ取り出したいときなどです。本記事では、GROUP BYとDATE()関数を組み合わせて、重複しない日付ごとのレコードを表示する方法を解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。ここでは、出荷日時(ShippingDate)と顧客名(CustomerName)を持つテーブルを定義します。 mysql> create table DemoTable1996 (