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

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

MySQLでテーブルの最後の数行を昇順(ASC)で取得したい場合、単純に ORDER BY 昇順+LIMIT を使うと「先頭」の行が取れてしまいます。そこで、サブクエリを使って一度降順(DESC)で末尾の行を取得し、その結果を外側で昇順に並べ替えるのが定番のテクニックです。

基本構文

select * from
(select * from yourTableName order by yourColumnName desc limit 3) anyAliasName
order by yourColumnName;

この構文では、内側のサブクエリで DESCLIMIT 3 を組み合わせて最後の3行を取り出し、外側のクエリで ORDER BY を指定して昇順に並べ替えています。

実際にテーブルを作成してみる

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

mysql> create table DemoTable1579
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (0.67 sec)

レコードを挿入する

次に、INSERT文を使っていくつかのレコードを追加します。

mysql> insert into DemoTable1579(Name) values('Robert');
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable1579(Name) values('Bob');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable1579(Name) values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1579(Name) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1579(Name) values('Mike');
Query OK, 1 row affected (0.09 sec)

テーブルの中身を確認する

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

mysql> select * from DemoTable1579;

実行すると、以下のような結果が出力されます。

+----+--------+
| Id | Name   |
+----+--------+
|  1 | Robert |
|  2 | Bob    |
|  3 | Chris  |
|  4 | Sam    |
|  5 | Mike   |
+----+--------+
5 rows in set (0.00 sec)

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

それでは、テーブルの最後の3行を昇順で取得するクエリを実行します。

mysql> select * from
    -> (select * from DemoTable1579 order by Id desc limit 3) t
    -> order by Id;

実行結果は以下の通りです。

+----+-------+
| Id | Name  |
+----+-------+
|  3 | Chris |
|  4 | Sam   |
|  5 | Mike  |
+----+-------+
3 rows in set (0.00 sec)

ポイントまとめ

  • 内側のサブクエリ:ORDER BY Id DESC LIMIT 3 でIDの大きい方から3件(=最後の3行)を取得する。
  • 外側のクエリ:ORDER BY Id で取得した結果を昇順に並べ替える。
  • サブクエリには必ずエイリアス(例:t)を付ける必要がある。

このように、サブクエリとLIMITを組み合わせることで、「末尾のN行を昇順で表示する」という要件をシンプルなSQLで実現できます。取得したい行数を変えたい場合は、LIMIT の数値を変更するだけで対応可能です。

  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のCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法

    MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&