MySQLでNOW()から1日前以降のレコードを取得する方法
NOW()から1日前以降のレコードを取得する基本構文
MySQLで「現在時刻(NOW())から1日前」以降のレコードを取得したい場合は、INTERVAL句を組み合わせた以下の構文を使用します。
SELECT * FROM テーブル名 WHERE カラム名 >= NOW() - INTERVAL 1 DAY;
この構文では、指定したdatetime型のカラムの値が、現在時刻から24時間前(1日前)よりも新しいレコードだけが抽出されます。それでは、実際にテーブルを作成して動作を確認してみましょう。
サンプルテーブルの作成
まずはdatetime型のカラムを持つテーブルを作成します。
mysql> CREATE TABLE GetRecordsFromNow
-> (
-> YourDateTime DATETIME
-> );
Query OK, 0 rows affected (1.76 sec)テストデータの挿入
次に、現在時刻を基準にしたさまざまな日付データを挿入します。DATE_ADD()関数を使うことで、NOW()を基準に過去や未来の日付を簡単に生成できます。
mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL 3 DAY)); Query OK, 1 row affected (0.28 sec) mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -1 DAY)); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -2 DAY)); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -3 DAY)); Query OK, 1 row affected (0.09 sec) mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -1 DAY)); Query OK, 1 row affected (0.08 sec)
この例では、未来の日付(+3日)、ちょうど1日前(-1日)、2日前(-2日)、3日前(-3日)、そして再び1日前(-1日)の計5件のレコードを挿入しています。
登録済みデータの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM GetRecordsFromNow;
実行結果は以下のとおりです。
+---------------------+ | YourDateTime | +---------------------+ | 2018-12-07 22:30:18 | | 2018-12-03 22:30:31 | | 2018-12-02 22:30:41 | | 2018-12-01 22:30:56 | | 2018-12-03 22:31:04 | +---------------------+ 5 rows in set (0.00 sec)
1日前以降のレコードのみを抽出するクエリ
ここで本題のクエリを実行します。「NOW()から1日前」以降のレコードを取得するには、WHERE句に>= NOW() - INTERVAL 1 DAYという条件を指定します。
mysql> SELECT * FROM GetRecordsFromNow WHERE YourDateTime >= NOW() - INTERVAL 1 DAY;
実行結果:
+---------------------+ | YourDateTime | +---------------------+ | 2018-12-07 22:30:18 | +---------------------+ 1 row in set (0.04 sec)
結果の解説
この出力例では、基準時刻が2018年12月4日22時30分頃のため、「1日前=2018年12月3日22:30以降」という条件になります。挿入した5件のうち、条件に該当するのは未来の日付である「2018-12-07 22:30:18」の1件だけでした。-1日のデータは基準時刻よりわずかに古いため、厳密には範囲外となる点に注意してください。
補足:SUBDATE関数を使った別の書き方
同様の結果はSUBDATE()関数でも得られます。
SELECT * FROM GetRecordsFromNow WHERE YourDateTime >= SUBDATE(NOW(), INTERVAL 1 DAY);
また、直近24時間ではなく「今日の0時以降」を取得したい場合は、CURDATE()を利用すると便利です。
SELECT * FROM GetRecordsFromNow WHERE YourDateTime >= CURDATE();
用途に応じてこれらの方法を使い分けることで、柔軟な日付条件でのレコード抽出が可能になります。
-
MySQLで同じ日付のレコードの値を合計する方法(GROUP BYとDATE関数の使い方)
はじめに MySQLでは、GROUP BY句とDATE()関数を組み合わせることで、同じ日付(日単位)のレコードに含まれる値を簡単に合計できます。datetime型のカラムには時刻情報も含まれていますが、DATE()関数を使えば日付部分だけを取り出してグループ化できるのがポイントです。 ここでは、実際にサンプルテーブルを作成し、同じ日の値を合計する手順を順番に解説していきます。 1. テーブルを作成する まず、以下のコマンドでテーブルを作成しましょう。今回は購入日時(PurchaseDate)と商品価格(ProductPrice)を持つテーブルを用意しました。 mysql> create
-
MySQLで月の範囲を指定してレコードを取得する方法
MySQLでは、YEAR()関数とMONTH()関数、さらにBETWEEN演算子を組み合わせることで、特定の月の範囲に該当するレコードを簡単に抽出できます。ここでは、前年の7月〜12月と当年の1月〜7月というように、年をまたいだ月の範囲でデータを取得する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1795 ( Name varchar(20), DueDate date