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

MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法

MySQLで日付をグループ化する基本

MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。

1. サンプルテーブルの作成

まず、顧客名と出荷日を格納するテーブルを作成します。

mysql> create table DemoTable2002
(
    CustomerName varchar(20),
    CustomerShippingDate datetime
);
Query OK, 0 rows affected (0.61 sec)

2. レコードの挿入

INSERT文を使って、サンプルデータをテーブルに追加します。

mysql> insert into DemoTable2002 values('Chris','2019-01-10');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable2002 values('David','2018-12-31');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2002 values('David','2019-12-16');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2002 values('Chris','2018-12-01');
Query OK, 1 row affected (0.12 sec)

3. テーブル内の全レコードを確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable2002;

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

+--------------+----------------------+
| CustomerName | CustomerShippingDate |
+--------------+----------------------+
| Chris        | 2019-01-10 00:00:00  |
| David        | 2018-12-31 00:00:00  |
| David        | 2019-12-16 00:00:00  |
| Chris        | 2018-12-01 00:00:00  |
+--------------+----------------------+
4 rows in set (0.00 sec)

4. 日付をグループ化してレコードを表示するクエリ

ここが本題です。顧客名(CustomerName)でグループ化し、それぞれの顧客の最も古い出荷日と最新の出荷日を取得するには、以下のようにMIN関数とMAX関数をGROUP BY句と組み合わせて使用します。

mysql> select date(min(CustomerShippingDate)),date(max(CustomerShippingDate)),CustomerName
    from DemoTable2002
    group by CustomerName;

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

+---------------------------------+---------------------------------+--------------+
| date(min(CustomerShippingDate)) | date(max(CustomerShippingDate)) | CustomerName |
+---------------------------------+---------------------------------+--------------+
| 2018-12-01                      | 2019-01-10                      | Chris        |
| 2018-12-31                      | 2019-12-16                      | David        |
+---------------------------------+---------------------------------+--------------+
2 rows in set (0.00 sec)

解説:クエリのポイント

  • MIN() / MAX()関数: グループ内の最小値・最大値を取得します。datetime型の場合でも正しく動作します。
  • DATE()関数: datetime型から時刻部分を取り除き、日付のみを表示するために使用しています。これにより「2018-12-01 00:00:00」ではなく「2018-12-01」という見やすい形式になります。
  • GROUP BY句: CustomerNameを指定することで、同じ顧客名のレコードが1つのグループにまとめられます。

このようにGROUP BY句を使えば、顧客ごとの最初の出荷日と最後の出荷日を簡単に集計できます。売上分析や配送履歴の管理など、実務でも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。

  1. MySQLのストアドプロシージャでテーブルのレコードを表示する方法

    MySQLでは、ストアドプロシージャ内にSELECT文を組み込むことで、テーブルのレコードを簡単に表示できます。ストアドプロシージャを活用すると、よく使うクエリを再利用可能な形で保存できるため、作業の効率化につながります。ここでは、実際の手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1933 ( ClientName varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERT

  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     -> (