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

MySQLで過去7日前のレコードから日時(DateTime)の行を取得する方法

MySQLで「ちょうど7日前」の日付に該当するレコードを取得したい場合、INTERVAL 7 DAYの概念を利用すると簡単に実現できます。本記事では、実際にテーブルを作成し、サンプルデータを投入したうえで、過去7日前のDateTime行を抽出するクエリを解説します。

サンプルテーブルの作成

まずは、以下のようにテーブルを作成しましょう。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    AdmissionDate datetime
);
Query OK, 0 rows affected (0.83 sec)

注意: ここでは、現在の日付を「2019-08-23」として説明を進めます。

テストデータの挿入

次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable(AdmissionDate) values('2019-01-23');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(AdmissionDate) values('2019-08-15');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(AdmissionDate) values('2019-08-16');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(AdmissionDate) values('2019-08-24');
Query OK, 1 row affected (0.14 sec)

登録済みレコードの確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+----+---------------------+
| Id | AdmissionDate       |
+----+---------------------+
|  1 | 2019-01-23 00:00:00 |
|  2 | 2019-08-15 00:00:00 |
|  3 | 2019-08-16 00:00:00 |
|  4 | 2019-08-24 00:00:00 |
+----+---------------------+
4 rows in set (0.00 sec)

過去7日前のDateTime行を取得するクエリ

それでは本題です。現在の日付(CURDATE())からINTERVAL 7 DAYを差し引いた日付と一致するレコードを抽出するには、以下のクエリを使用します。

mysql> select *from DemoTable where date(AdmissionDate)=CURDATE() - interval 7 day;

このクエリを実行すると、次の結果が得られます。

+----+---------------------+
| Id | AdmissionDate       |
+----+---------------------+
|  3 | 2019-08-16 00:00:00 |
+----+---------------------+
1 row in set (0.04 sec)

解説のポイント

現在日付が「2019-08-23」であるため、その7日前である「2019-08-16」に該当するレコード(Id: 3)だけが抽出されました。ポイントは以下の2点です。

  • CURDATE()で現在の日付を取得し、- INTERVAL 7 DAYでちょうど7日前の日付を算出しています。
  • date(AdmissionDate)でDateTime型の値を日付部分のみに変換することで、時刻の影響を受けずに正確に比較できます。

この方法を応用すれば、「過去30日間」や「先月のデータ」など、さまざまな期間指定の抽出にも対応できます。INTERVALの数値や単位(DAY、MONTH、YEARなど)を変更するだけで柔軟に使い分けられるので、ぜひ活用してみてください。

  1. 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>

  2. MySQLでDATETIME型の日時に日数を追加する方法

    MySQLでは、DATE_ADD()関数を使うことで、DATETIME型の値に指定した日数を簡単に追加できます。この記事では、実際にテーブルを作成し、日時フィールドに日数を加算するまでの手順を具体例とともに解説します。 1. テーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1871     (     ArrivalDate datetime     ); Query OK, 0