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() を組み合わせれば、日時データの経過時間を簡単に算出できます。作業時間の計測やログ分析など、さまざまな場面で応用できるので、ぜひ活用してください。
-
MySQLで日付データから月の初日と末日を取得する方法
MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>
-
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コマンドを使ってテ