MySQLでタイムスタンプが15日以上前のレコードを取得するクエリの書き方
はじめに
MySQLでは、DATE_SUB()関数とNOW()関数を組み合わせることで、「現在時刻から15日以上前」のタイムスタンプを持つレコードを簡単に抽出できます。この記事では、テーブルの作成からデータの挿入、条件に合うレコードの取得まで、実際の流れに沿って手順を解説します。
テーブルの作成
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> ArrivalDate datetime
-> );
Query OK, 0 rows affected (0.91 sec)
レコードの挿入
INSERTコマンドを使用して、テーブルに複数のレコードを挿入します。ここでは、現在の日付が「2019-07-03」であると仮定します。
mysql> insert into DemoTable values('2019-07-03');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2019-06-20');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2019-06-15');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2018-06-11');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2018-06-01');
Query OK, 1 row affected (0.17 sec)
登録済みレコードの確認
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+---------------------+ | ArrivalDate | +---------------------+ | 2019-07-03 00:00:00 | | 2019-06-20 00:00:00 | | 2019-06-15 00:00:00 | | 2018-06-11 00:00:00 | | 2018-06-01 00:00:00 | +---------------------+ 5 rows in set (0.00 sec)
15日以上前のレコードを取得するクエリ
タイムスタンプが15日より前のレコードを取得するには、以下のクエリを使用します。
mysql> select *from DemoTable where ArrivalDate < date_sub(now(), interval 15 day) order by ArrivalDate DESC;
このクエリのポイントは以下の通りです。
- now():現在の日時を取得します。
- date_sub(日付, interval 15 day):指定した日付から15日前の日時を計算します。
- order by ArrivalDate DESC:結果を日付の降順(新しい順)で並べ替えます。
実行結果は以下の通りです。
+---------------------+ | ArrivalDate | +---------------------+ | 2019-06-15 00:00:00 | | 2018-06-11 00:00:00 | | 2018-06-01 00:00:00 | +---------------------+ 3 rows in set (0.00 sec)
現在日が「2019-07-03」の場合、15日前は「2019-06-18」となるため、それより前の3件のレコードのみが抽出されていることがわかります。
まとめ
date_sub(now(), interval 15 day)を使えば、現在時刻を基準にして15日以上前のレコードを柔軟に抽出できます。「15 day」の部分を変更するだけで、30日前や1年前など、任意の期間への応用も簡単です。古いデータのアーカイブやクリーンアップ処理など、日常的なデータベース運用において役立つテクニックなので、ぜひ覚えておきましょう。
-
MySQLで月の範囲を指定してレコードを取得する方法
MySQLでは、YEAR()関数とMONTH()関数、さらにBETWEEN演算子を組み合わせることで、特定の月の範囲に該当するレコードを簡単に抽出できます。ここでは、前年の7月〜12月と当年の1月〜7月というように、年をまたいだ月の範囲でデータを取得する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1795 ( Name varchar(20), DueDate date
-
MySQLで今日から15日前以前のレコードを取得する方法|DATE_SUB()とINTERVALの使い方
MySQLで「今日から15日前」より前の日付を持つレコードを抽出したい場合には、DATE_SUB()関数とINTERVALの概念を利用します。ここでは、まずサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1845 ( ArrivalDate date ); Query OK, 0 rows affected (0.00 sec)次に、insertコマンドを使ってテーブルにいくつかのレコードを挿入します。mysql>