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

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);

ログ分析やアクセス監視など、「直近のデータだけを素早く取り出したい」という場面で非常に役立つテクニックなので、ぜひ日常の開発に活用してください。

  1. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected

  2. MySQLで同じIDの行を合計する方法:GROUP BYとHAVING句の使い方

    MySQLで同じIDを持つ複数の行の値を合計したい場合、「GROUP BY」句と「HAVING」句を組み合わせて使用します。この記事では、テーブルの作成からクエリの実行まで、手順を追ってわかりやすく解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成しましょう。ここでは「id」と「price」という2つのカラムを持つシンプルなテーブルを用意します。 例 mysql> create table demo84 -> ( -> id int, -> price int -> ) -> ; Query OK,