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
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.82 sec)2. レコードの挿入
次に、INSERTコマンドを使って複数のレコードを挿入します。VALUESに空のかっこを並べることで、AUTO_INCREMENTにより自動的に連番が採番されます。
mysql> insert into DemoTable1567 values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(); Query OK, 37 rows affected (0.37 sec) Records: 37 Duplicates: 0 Warnings: 0
この例では37件のレコードが登録されました。
3. 全レコードの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select * from DemoTable1567;
実行結果は以下のとおりです。
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | | 30 | | 31 | | 32 | | 33 | | 34 | | 35 | | 36 | | 37 | +----+ 37 rows in set (0.00 sec)
IDが1から37まで昇順で登録されていることがわかります。
4. 最後の30行を取得するクエリ
ここで本題のクエリです。ORDER BY Id DESCで降順に並べ替え、LIMIT 30で先頭の30件だけを取得します。
mysql> select * from DemoTable1567 order by Id DESC LIMIT 30;
実行結果は以下のとおりです。
+----+ | Id | +----+ | 37 | | 36 | | 35 | | 34 | | 33 | | 32 | | 31 | | 30 | | 29 | | 28 | | 27 | | 26 | | 25 | | 24 | | 23 | | 22 | | 21 | | 20 | | 19 | | 18 | | 17 | | 16 | | 15 | | 14 | | 13 | | 12 | | 11 | | 10 | | 9 | | 8 | +----+ 30 rows in set (0.00 sec)
補足:結果を昇順に並べ直すには
上記のクエリでは、結果が降順(37→8)で返ってきます。「最後の30行を昇順(古い順)で表示したい」という場合は、サブクエリを使って外側でもう一度ORDER BYを指定します。
mysql> select * from (
-> select * from DemoTable1567 order by Id DESC LIMIT 30
-> ) AS t order by Id ASC;このようにすることで、IDが8〜37の30行が昇順で取得できます。
まとめ
- MySQLで末尾のN行を取得するには、「ORDER BY カラム名 DESC LIMIT N」を使用します。
- 降順で取得した結果を昇順に戻したい場合は、サブクエリを利用します。
- 大量データの場合は、ORDER BYで指定するカラムにインデックスを張っておくとパフォーマンスが向上します。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected
-
MySQLで最新50件のレコードからランダムに5行だけ抽出する方法
MySQLでテーブルの末尾(最新)50件の中から、さらにランダムに5行だけ取り出したい場合は、サブクエリと ORDER BY RAND() を組み合わせるのが効果的です。この記事では、実際にテーブルを作成しながら手順を解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1853 ( UserId int NOT NULL AUTO_INCREMENT, PRIMARY KEY(UserId) ); Query OK, 0 rows affected (0.00 s