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

MySQLで列の最初の日付と最後の日付を比較する方法

はじめに

MySQLで同じ列内の最初の日付(時刻)と最後の日付(時刻)を比較し、その差分を求めたい場合があります。そんなときは、TIME_TO_SEC() 関数を MAX() および MIN() 関数と組み合わせて使用すると便利です。

TIME_TO_SEC() は時刻を秒数に変換する関数で、秒数同士なら簡単に差を計算できます。計算結果は SEC_TO_TIME() を使えば再び「時:分:秒」形式に戻せます。

ここでは、実際にサンプルテーブルを作成して、最初の投稿日時と最後の投稿日時の差を求める手順を解説します。

1. テーブルを作成する

まずはサンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    UserName varchar(100),
    UserPostDatetime datetime
);
Query OK, 0 rows affected (0.65 sec)

2. レコードを挿入する

INSERT文を使って、テーブルにいくつかのレコードを登録します。

mysql> insert into DemoTable values('Adam','2019-08-24 11:10:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Adam','2019-08-24 11:20:00');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Adam','2019-08-24 11:50:00');
Query OK, 1 row affected (0.13 sec)

3. 登録したレコードを確認する

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

mysql> select *from DemoTable;

実行すると、次のような結果が得られます。

+----------+---------------------+
| UserName | UserPostDatetime    |
+----------+---------------------+
|     Adam | 2019-08-24 11:10:00 |
|     Adam | 2019-08-24 11:20:00 |
|     Adam | 2019-08-24 11:50:00 |
+----------+---------------------+
3 rows in set (0.00 sec)

4. 最初の日付と最後の日付を比較する

以下のクエリを実行すると、ユーザーごとの最初の日時と最後の日時の差分を求められます。GROUP BY でユーザー名ごとにまとめ、MAX() から MIN() を引くことで所要時間を計算しています。

mysql> select UserName,sec_to_time(max(time_to_sec(UserPostDatetime))-min(time_to_sec(UserPostDatetime)))t
from DemoTable
group by UserName;

実行結果

+----------+----------+
| UserName | t        |
+----------+----------+
|     Adam | 00:40:00 |
+----------+----------+
1 row in set (0.03 sec)

結果の見方

この結果から、ユーザー「Adam」の最初の投稿が11時10分、最後の投稿が11時50分であるため、その差である40分(00:40:00)が表示されていることがわかります。

このように TIME_TO_SEC()SEC_TO_TIME()MAX()MIN() を組み合わせれば、日時データの経過時間を簡単に算出できます。作業時間の計測やログ分析など、さまざまな場面で応用できるので、ぜひ活用してください。

  1. MySQLで日付データから月の初日と末日を取得する方法

    MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>

  2. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ