MySQLで過去1時間以内に追加された行を取得する方法
MySQLでは、DATE_SUB()関数とNOW()関数を組み合わせることで、過去1時間以内に追加された行を簡単に抽出できます。この記事では、基本構文から実際のテーブルを使った実行例まで、手順を追って詳しく解説します。
基本構文
過去1時間以内のレコードを取得するには、次のようなクエリを使用します。
select *from yourTableName where yourDateTimeColumnName >= date_sub(now(),interval 1 hour);
NOW()は現在の日時を返し、DATE_SUB()は基準となる日時から指定した間隔を差し引いた値を返します。つまり date_sub(now(),interval 1 hour) は「現在時刻のちょうど1時間前」を意味します。日時カラムの値がその時刻以降であれば、それは過去1時間以内に追加されたレコードということになります。
それでは、実際にテーブルを作成して動作を確認してみましょう。
サンプルテーブルの作成
まず、以下のクエリでテーブルを作成します。
mysql> create table LastHourRecords -> ( -> Id int, -> Name varchar(100), -> Login datetime -> ); Query OK, 0 rows affected (0.67 sec)
レコードの挿入
続いて、INSERT文でdatetime型の日時データを含むレコードを挿入します。
mysql> insert into LastHourRecords values(1,'John','2018-12-19 10:00:00'); Query OK, 1 row affected (0.17 sec) mysql> insert into LastHourRecords values(2,'Carol','2018-12-19 10:10:00'); Query OK, 1 row affected (0.15 sec) mysql> insert into LastHourRecords values(3,'Sam','2018-12-19 10:05:00'); Query OK, 1 row affected (0.13 sec) mysql> insert into LastHourRecords values(4,'Mike','2018-12-18 12:10:00'); Query OK, 1 row affected (0.10 sec)
登録済みレコードの確認
SELECT文でテーブル内のすべてのレコードを表示します。
mysql> select *from LastHourRecords;
出力結果
+------+-------+---------------------+ | Id | Name | Login | +------+-------+---------------------+ | 1 | John | 2018-12-19 10:00:00 | | 2 | Carol | 2018-12-19 10:10:00 | | 3 | Sam | 2018-12-19 10:05:00 | | 4 | Mike | 2018-12-18 12:10:00 | +------+-------+---------------------+ 4 rows in set (0.00 sec)
John、Carol、Samの3件は当日のデータですが、Mikeの1件だけは前日のデータになっています。
過去1時間以内の行を取得するクエリ
それでは、過去1時間以内に追加された行だけを取得してみましょう。たとえば現在時刻が「2018-12-19 11:05:00」の場合、1時間前は「10:05:00」となるため、それ以降の日時を持つレコードが対象になります。
mysql> select *from LastHourRecords -> where Login >= Date_sub(now(),interval 1 hour);
出力結果
+------+-------+---------------------+ | Id | Name | Login | +------+-------+---------------------+ | 1 | John | 2018-12-19 10:00:00 | | 2 | Carol | 2018-12-19 10:10:00 | | 3 | Sam | 2018-12-19 10:05:00 | +------+-------+---------------------+ 3 rows in set (0.00 sec)
実行結果を見ると、前日のMikeのレコードが除外され、直近1時間以内の3件のみが取得できていることがわかります。
応用:INTERVALの単位を変えて柔軟に抽出する
INTERVALの単位を変更すれば、さまざまな期間での抽出にも簡単に対応できます。
-- 過去30分以内のレコードを取得 select *from yourTableName where yourDateTimeColumnName >= date_sub(now(),interval 30 minute); -- 過去24時間以内のレコードを取得 select *from yourTableName where yourDateTimeColumnName >= date_sub(now(),interval 24 hour);
ログ分析やアクセス監視など、「直近のデータだけを素早く取り出したい」という場面で非常に役立つテクニックなので、ぜひ日常の開発に活用してください。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected
-
MySQLで同じIDの行を合計する方法:GROUP BYとHAVING句の使い方
MySQLで同じIDを持つ複数の行の値を合計したい場合、「GROUP BY」句と「HAVING」句を組み合わせて使用します。この記事では、テーブルの作成からクエリの実行まで、手順を追ってわかりやすく解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成しましょう。ここでは「id」と「price」という2つのカラムを持つシンプルなテーブルを用意します。 例 mysql> create table demo84 -> ( -> id int, -> price int -> ) -> ; Query OK,