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

MySQLでテーブルをクエリし、直近3日より前に投稿された行を取得する方法

はじめに

ここでは、現在の日付を「2019-10-20」として話を進めます。まずは例として、テーブルを作成してみましょう。

mysql> create table DemoTable1582
-> (
-> PostedDate datetime
-> );
Query OK, 0 rows affected (13.36 sec)

レコードの挿入

insertコマンドを使用して、テーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable1582 values('2019-01-21 12:34:40');
Query OK, 1 row affected (1.06 sec)
mysql> insert into DemoTable1582 values('2019-10-15 11:00:00');
Query OK, 1 row affected (0.87 sec)
mysql> insert into DemoTable1582 values('2019-10-25 1:10:00');
Query OK, 1 row affected (1.14 sec)

登録済みレコードの確認

select文を使って、テーブル内のすべてのレコードを表示します。

mysql> select * from DemoTable1582;

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

+---------------------+
| PostedDate |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
| 2019-10-25 01:10:00 |
+---------------------+
3 rows in set (0.00 sec)

直近3日より前の投稿を取得するクエリ

それでは、直近3日よりも前に投稿された行をフェッチするためのクエリを見ていきましょう。

mysql> select * from DemoTable1582
-> where PostedDate between date_sub(PostedDate, interval 3 day) and now();

このクエリを実行すると、以下のような出力が得られます。

+---------------------+
| PostedDate |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
+---------------------+
2 rows in set (0.20 sec)

出力結果を見ると、現在の日付(2019-10-20)より後に投稿された「2019-10-25」のレコードは除外され、それ以前に投稿された2件のレコードのみが取得されていることがわかります。

補足:date_sub()とnow()を組み合わせた別の書き方

より一般的なアプローチとしては、date_sub()関数でnow()(現在日時)から3日前の日時を算出し、その日時より前の投稿だけを絞り込む方法もあります。

mysql> select * from DemoTable1582
-> where PostedDate < date_sub(now(), interval 3 day);

このようにdate_sub()関数とinterval句を組み合わせることで、「○日前」のような相対的な日時条件を簡単に指定でき、ログの集計や古いデータの抽出など、さまざまな場面で活用できます。

  1. MySQLで最後の30行を取得する方法(ORDER BY DESCとLIMITの使い方)

    MySQLでテーブルの最後の30行を取得したい場合は、ORDER BY DESC(降順ソート)とLIMIT 30を組み合わせるのが基本です。降順に並べ替えることで、最新(またはIDが大きい)レコードが先頭に来るため、先頭から30件を取り出すことで実質的に「最後の30行」が取得できます。基本構文SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 30;それでは、実際にサンプルテーブルを作成して動作を確認していきましょう。1. テーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable1567

  2. MySQLでテーブルの最後の3行を昇順に取得する方法

    MySQLでテーブルの最後の数行を昇順(ASC)で取得したい場合、単純に ORDER BY 昇順+LIMIT を使うと「先頭」の行が取れてしまいます。そこで、サブクエリを使って一度降順(DESC)で末尾の行を取得し、その結果を外側で昇順に並べ替えるのが定番のテクニックです。基本構文select * from (select * from yourTableName order by yourColumnName desc limit 3) anyAliasName order by yourColumnName;この構文では、内側のサブクエリで DESC と LIMIT 3 を組み合わせて最後