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

MySQLで基準日から30日より古い日付データを削除するクエリの書き方

MySQLで特定の日付から30日以上前のレコードを削除する方法

MySQLでは、ある基準日を起点として、そこから30日より古い日付データを持つレコードを削除できます。DELETE文とINTERVAL演算子を組み合わせることで、簡単に実装可能です。

基本構文

以下が基本的な構文です。

delete from yourTableName where yourColumnName < (yourAnotherDateValue - INTERVAL 30 DAY);

それでは、実際にサンプルテーブルを作成して動作を確認してみましょう。

1. テーブルの作成

まず、テスト用のテーブルを作成します。

mysql> create table DemoTable
(
    DueDate date
);
Query OK, 0 rows affected (0.68 sec)

2. レコードの挿入

INSERT文を使って、サンプルデータを数件登録します。

mysql> insert into DemoTable values('2019-08-25');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('2019-07-01');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2019-06-20');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('2019-09-02');
Query OK, 1 row affected (0.14 sec)

3. 登録データの確認

SELECT文でテーブル内の全レコードを表示します。

mysql> select *from DemoTable;

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

+------------+
| DueDate    |
+------------+
| 2019-08-25 |
| 2019-07-01 |
| 2019-06-20 |
| 2019-09-02 |
+------------+
4 rows in set (0.00 sec)

4. 削除クエリの実行

ここで、基準日「2019-08-31」から30日より前の日付を持つレコードを削除します。具体的には、次のクエリを実行します。

mysql> delete from DemoTable where DueDate < ('2019-08-31' - INTERVAL 30 DAY);
Query OK, 2 rows affected (0.22 sec)

このクエリでは、「2019-08-31」から30日を引いた日付(2019-08-01)よりも古いDueDateを持つレコードが削除対象となります。今回の場合、「2019-07-01」と「2019-06-20」の2行が該当しました。

5. 削除後の確認

再度SELECT文を実行して、テーブルの状態を確認しましょう。

mysql> select *from DemoTable;

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

+------------+
| DueDate    |
+------------+
| 2019-08-25 |
| 2019-09-02 |
+------------+
2 rows in set (0.00 sec)

まとめ

このように、「日付値 - INTERVAL 30 DAY」を使うことで、指定した基準日から30日より古いデータだけを抽出・削除できます。期限切れのログデータや予約情報などを定期的にクリーンアップしたい場合に非常に便利なテクニックなので、ぜひ活用してください。なお、CURDATE()関数を使えば「現在日時から30日前」を基準にすることも可能です。

  1. MySQLでタイムスタンプが5分より古いレコードを削除する方法

    MySQLでは、DELETE文とNOW()関数、INTERVAL演算子を組み合わせることで、指定した時間より古いレコードを簡単に削除できます。この記事では、タイムスタンプが現在時刻から5分より古いレコードを削除する具体的な手順を、サンプルコード付きで解説します。 1. サンプルテーブルの作成 まず、動作を確認するためのテーブルを作成します。ここではDATETIME型のカラムを持つシンプルなテーブルを用意しましょう。 mysql> create table DemoTable1851 ( DueDate datetime ); Query OK, 0 rows a

  2. MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法

    MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)