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

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

MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。

1. サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。

mysql> create table Last10RecordsDemo
   -> (
   -> id int,
   -> name varchar(100)
   -> );
Query OK, 0 rows affected (0.75 sec)

2. レコードの挿入

続いて、作成したテーブルに12件のデータを挿入します。

mysql> insert into Last10RecordsDemo values(1,'John'),(2,'Carol'),(3,'Bob'),(4,'Sam'),(5,'David'),(6,'Taylor');
Query OK, 6 rows affected (0.12 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> insert into Last10RecordsDemo values(7,'Sam'),(8,'Justin'),(9,'Ramit'),(10,'Smith'),(11,'Clark'),(12,'Johnson');
Query OK, 6 rows affected (0.14 sec)
Records: 6  Duplicates: 0  Warnings: 0

3. 全レコードの確認

挿入されたすべてのレコードを表示してみましょう。

mysql> select *from Last10RecordsDemo;

実行結果は以下の通りです。合計12件のレコードが登録されていることがわかります。

+------+---------+
| id   | name    |
+------+---------+
|    1 | John    |
|    2 | Carol   |
|    3 | Bob     |
|    4 | Sam     |
|    5 | David   |
|    6 | Taylor  |
|    7 | Sam     |
|    8 | Justin  |
|    9 | Ramit   |
|   10 | Smith   |
|   11 | Clark   |
|   12 | Johnson |
+------+---------+
12 rows in set (0.00 sec)

4. 最後の10件を取得するクエリの構文

テーブルから最後の10件を取得するには、以下のような構文を使用します。ポイントは、まずORDER BY id DESC LIMIT 10で末尾から10件を取り出し、その結果をサブクエリとして再度ORDER BY id ASCで昇順に並べ替えている点です。

SELECT * FROM (
   SELECT * FROM yourTableName ORDER BY id DESC LIMIT 10
)Var1
   ORDER BY id ASC;

なお、単純にORDER BY id DESC LIMIT 10だけで取得した場合、結果は降順(新しい順)で表示されます。元の並び順(昇順)のまま末尾の10件を取得したい場合は、上記のようにサブクエリを使うのが一般的な手法です。

5. クエリの実行例

それでは、実際に上記のクエリを実行してみましょう。

mysql> SELECT * FROM (
   ->     SELECT * FROM Last10RecordsDemo ORDER BY id DESC LIMIT 10
   -> )Var1
   ->
   -> ORDER BY id ASC;

以下の出力のように、idが3〜12の「最後の10件」だけが昇順で取得できました。

+------+---------+
| id   | name    |
+------+---------+
|    3 | Bob     |
|    4 | Sam     |
|    5 | David   |
|    6 | Taylor  |
|    7 | Sam     |
|    8 | Justin  |
|    9 | Ramit   |
|   10 | Smith   |
|   11 | Clark   |
|   12 | Johnson |
+------+---------+
10 rows in set (0.00 sec)

全レコードと最後の10件の比較

SELECT文の実行結果を見比べることで、全12件のレコードから末尾の10件のみが正しく抽出されていることが確認できます。

全レコード数:12件

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

最後の10件:10件

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

このように、ORDER BY ... DESCLIMITを組み合わせたサブクエリを使えば、任意のテーブルから簡単に最後のN件のレコードを取得できます。ログの最新履歴や直近の登録データを表示したい場面などでぜひ活用してください。

  1. MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)

    MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599    -> (    -> Shippingdate d

  2. MySQLで現在の日付から1日以上の行を抽出する方法(INTERVALの使い方)

    現在の日時を基準に「1日前以降」のデータを取得したい場合は、MySQLのINTERVALを使うと簡単に実現できます。この記事では、サンプルテーブルを作成し、実際に条件に合う行を抽出するまでの手順を順番に解説します。 1. 現在の日付を確認する まず、CURDATE()関数で現在の日付を確認しておきましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-11-29 | +------------+ 1 row in set (0.00 sec) 現在の日付は「2019-11-29」