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

MySQLで現在日時から過去3日間のレコードを抽出し、該当する数値の合計を求める方法

MySQLでは、NOW()関数とINTERVALを組み合わせることで、「現在日時からさかのぼって○日以内」といった条件でレコードを簡単に抽出できます。この記事では、実際にテーブルを作成し、過去3日間のレコードを対象に合計値を求める手順をサンプルSQL付きで解説します。


1. テーブルの作成

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

mysql> create table DemoTable
(
    ProductAmount int,
    PurchaseDate datetime
);
Query OK, 0 rows affected (0.94 sec)

注意: ここでは、現在の日付が「2019-09-15」であると仮定して説明を進めます。

2. テストデータの挿入

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

mysql> insert into DemoTable values(567,'2019-09-10');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(1347,'2019-09-14');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(2033,'2019-09-13');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(1256,'2019-09-11');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(1000,'2019-09-16');
Query OK, 1 row affected (0.14 sec)

3. 登録したレコードの確認

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

mysql> select *from DemoTable;

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

+---------------+---------------------+
| ProductAmount | PurchaseDate        |
+---------------+---------------------+
|           567 | 2019-09-10 00:00:00 |
|          1347 | 2019-09-14 00:00:00 |
|          2033 | 2019-09-13 00:00:00 |
|          1256 | 2019-09-11 00:00:00 |
|          1000 | 2019-09-16 00:00:00 |
+---------------+---------------------+
5 rows in set (0.00 sec)

4. NOW()関数で過去3日間のレコードを集計する

ここからが本題です。NOW()関数は現在の日時を返します。そこからINTERVAL 3 DAY(3日間)を引くことで「3日前の時点」を求められます。WHERE句でPurchaseDateがその時点より後であるという条件を指定すれば、過去3日間のレコードだけを抽出できる仕組みです。

mysql> select sum(ProductAmount) from DemoTable
    where PurchaseDate > NOW()- interval 3 day;

このクエリを実行すると、過去3日以内に購入されたレコードのProductAmount(商品金額)の合計が求められます。

+--------------------+
| sum(ProductAmount) |
+--------------------+
|              4380  |
+--------------------+
1 row in set (0.00 sec)

まとめ

NOW() - INTERVAL 3 DAYのように書くことで、現在日時を基準とした相対的な日付条件をシンプルに表現できます。「3 day」の部分を「7 day」や「1 month」などに変更すれば、さまざまな期間での集計に応用可能です。売上集計やアクセスログの分析など、日常的なデータ処理で非常に役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで現在の日付と翌日のレコードを条件に特定の列を抽出する方法

    MySQLでは、CURDATE()関数を使うことで、現在の日付やその翌日に該当するレコードを簡単に抽出できます。この記事では、実際のサンプルを使いながら、現在の日付と翌日の出荷日を持つレコードから特定の列を選択して取得する方法を解説します。 1. 現在の日付を確認する まず、curdate()関数で現在の日付を取得してみましょう。 mysql> select curdate(); 実行すると、以下のような結果が表示されます。 +------------+ | curdate() | +------------+ | 2019-12-15 | +------------+ 1 row

  2. MySQLで現在の日付に11日を追加する方法【DATE_ADD関数の使い方】

    はじめにMySQLでは、DATE_ADD()関数を使うことで、日付に指定した日数を簡単に加算できます。本記事では、現在の日付(CURDATE())に11日を追加する方法を、テーブル作成からクエリ実行まで具体的な例を交えて解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1994 ( ArrivalDate date ); Query OK, 0 rows affected (5.33 sec)テストデータの挿入続いて、INSERTコマンドを使用してテーブルに複数のレコードを挿入します。mysql&g