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 を組み合わせて最後の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 の数値を変更するだけで対応可能です。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected
-
MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法
MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&