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

【MySQL】IDの昇順(ASC)で並べ替えた最後の3行を取得する方法

サブクエリを使った基本的な方法

IDの昇順(ASC)で並べ替えた状態で、テーブルの最後の3行だけを取得したい場合は、サブクエリを利用するのが最もシンプルです。まず内側のクエリでIDの降順(DESC)に並べ替えて上位3件を取り出し、その結果を外側のクエリで改めて昇順(ASC)に並べ替えます。

基本構文は以下の通りです。

SELECT * FROM (
    SELECT * FROM yourTableName ORDER BY yourIdColumnName DESC LIMIT 3
) anyAliasName
ORDER BY yourIdColumnName;

実際に試してみよう

1. テーブルを作成する

まずはサンプル用のテーブルを作成します。

mysql> create table DemoTable
(
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName varchar(100)
);
Query OK, 0 rows affected (0.60 sec)

2. レコードを挿入する

INSERTコマンドを使って、複数のレコードを追加していきます。

mysql> insert into DemoTable(ClientName) values('Larry');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable(ClientName) values('Chris');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(ClientName) values('Bob');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(ClientName) values('David');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(ClientName) values('Carol');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(ClientName) values('Robert');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable(ClientName) values('Sam');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable(ClientName) values('Mike');
Query OK, 1 row affected (0.12 sec)

3. 全レコードを確認する

SELECT文でテーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1        | Larry      |
| 2        | Chris      |
| 3        | Bob        |
| 4        | David      |
| 5        | Carol      |
| 6        | Robert     |
| 7        | Sam        |
| 8        | Mike       |
+----------+------------+
8 rows in set (0.00 sec)

最後の3行をIDの昇順で取得するクエリ

それでは本題です。以下のクエリを実行すると、IDの昇順(ASC)に並べ替えた状態で最後の3行を取得できます。

mysql> SELECT * FROM (
   SELECT * FROM DemoTable ORDER BY ClientId DESC LIMIT 3
) tbl
ORDER BY ClientId ASC;

実行結果は以下の通りです。IDが6〜8の、つまり最後に登録された3件が昇順で表示されています。

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 6        | Robert     |
| 7        | Sam        |
| 8        | Mike       |
+----------+------------+
3 rows in set (0.00 sec)

仕組みの解説

このクエリが期待どおりに動作する仕組みは次の2段階になっています。

  • 内側のサブクエリ: ClientIdの降順(DESC)で全レコードを並べ替え、LIMIT 3によってIDが最大の3行(=最後に登録されたレコード)を取り出します。
  • 外側のクエリ: サブクエリの結果セットに対して、再びClientIdの昇順(ASC)で並べ替えることで、IDの小さい順に整列した「最後の3行」が得られます。

なお、FROM句内のサブクエリには必ずエイリアス(上記の例では「tbl」)を付ける必要がある点に注意してください。エイリアスがないと構文エラーになります。また、この手法はページング処理や「最新のN件を古い順に表示したい」といったケースでも広く活用できる定番テクニックです。

  1. MySQLでSELECT文を使わずにテーブルが存在するかどうか確認する方法

    MySQLでは、SHOWコマンドを使用することで、SELECT文を実行せずにテーブルの存在を簡単に確認できます。この記事では、具体的な手順と実行例をわかりやすく解説します。1. データベースを選択するまず、USEコマンドで対象のデータベースを選択します。mysql> USE business; Database changedこれで「business」データベースに切り替わりました。2. データベース内のテーブル一覧を表示する次に、SHOW tables;を実行すると、そのデータベースに存在するすべてのテーブルの一覧を取得できます。mysql> SHOW tables;実行結果は以

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

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