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

MySQLでニューステーブルから過去6か月間のレコードを取得する方法

ニューステーブルから過去6か月分のレコードを抽出したい場合、MySQLのdate_sub()関数を活用するのが最も効率的な方法です。ニュースレコードは通常、日付に基づいて管理されているため、この関数を使えば現在時刻から6か月前の時点以降のデータを簡単に絞り込めます。

date_sub()関数を使った基本的な構文

select * from yourTableName where yourDateTimeColumnName >= date_sub(now(), interval 6 month);

この構文では、now()関数で現在の日時を取得し、date_sub()関数によってそこから「interval 6 month(6か月)」を差し引いた日時より新しいレコードのみを抽出しています。

サンプルテーブルの作成

実際に動きを確認するため、ニュースIDと公開日だけを持つシンプルなテーブルを作成してみましょう。

mysql> create table Newstable
   -> (
   -> NewsId int,
   -> NewsDatetime datetime
   -> );
Query OK, 0 rows affected (0.66 sec)

テストデータの挿入

次に、insertコマンドを使って複数のレコードを登録します。意図的に異なる月の日付を含めています。

mysql> insert into Newstable values(101,'2018-2-10');
Query OK, 1 row affected (0.18 sec)

mysql> insert into Newstable values(102,'2018-12-10');
Query OK, 1 row affected (0.19 sec)

mysql> insert into Newstable values(103,'2018-3-14');
Query OK, 1 row affected (0.14 sec)

mysql> insert into Newstable values(104,'2018-12-12');
Query OK, 1 row affected (0.29 sec)

mysql> insert into Newstable values(105,'2018-4-21');
Query OK, 1 row affected (0.09 sec)

mysql> insert into Newstable values(106,'2018-6-30');
Query OK, 1 row affected (0.22 sec)

登録済みレコードの確認

select文ですべてのレコードを表示して、テーブルの中身を確認しておきます。

mysql> select *from Newstable;

出力結果

+--------+---------------------+
| NewsId | NewsDatetime        |
+--------+---------------------+
|    101 | 2018-02-10 00:00:00 |
|    102 | 2018-12-10 00:00:00 |
|    103 | 2018-03-14 00:00:00 |
|    104 | 2018-12-12 00:00:00 |
|    105 | 2018-04-21 00:00:00 |
|    106 | 2018-06-30 00:00:00 |
+--------+---------------------+
6 rows in set (0.00 sec)

過去6か月間のレコードを抽出するクエリ

それでは本題のクエリです。NewsDatetimeカラムの値が、現在時刻から6か月前よりも後であるレコードを条件に指定します。

mysql> select *from Newstable where NewsDatetime > date_sub(now(), Interval 6 month);

出力結果

+--------+---------------------+
| NewsId | NewsDatetime        |
+--------+---------------------+
|    102 | 2018-12-10 00:00:00 |
|    104 | 2018-12-12 00:00:00 |
|    106 | 2018-06-30 00:00:00 |
+--------+---------------------+
3 rows in set (0.00 sec)

実行結果を見ると、基準日から見て直近6か月以内に公開されたニュースID「102」「104」「106」の3件だけが返されていることがわかります。それ以前の日付を持つレコードは自動的に除外されます。

補足:>=と>の違いについて

基本構文では>=(以上)を使用していますが、例のクエリでは>(より大きい)を使っています。境界となる日時そのものを含めたい場合は>=を、含めたくない場合は>を使い分けてください。また、datetime型ではなくdate型のカラムに対しても同じ考え方で適用できますので、用途に合わせて柔軟に使いこなしましょう。

  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. JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法

    MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI