MySQLでテーブルの後ろから2番目の行を取得する方法
MySQLでテーブルの後ろから2番目(末尾から2番目)の行を取得するには、ORDER BY句とLIMIT句を組み合わせて使用します。降順に並べ替えたうえで、先頭の1行をスキップし、その次の1行だけを取り出すのがポイントです。
基本構文
SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 1,1;
LIMITの「1,1」は、最初の数字がスキップする行数(オフセット)、次の数字が取得する行数を意味します。つまり、降順に並べた結果の2行目=元のテーブルの後ろから2番目の行が取得できます。
サンプルテーブルの作成
実際に動きを確認するため、まずはテーブルを作成しましょう。
mysql> create table secondLastDemo
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(10)
-> );
Query OK, 0 rows affected (0.52 sec)テストデータの挿入
次に、INSERTコマンドを使ってレコードを挿入します。
mysql> insert into secondLastDemo(StudentName) values('Larry');
Query OK, 1 row affected (0.15 sec)
mysql> insert into secondLastDemo(StudentName) values('Carol');
Query OK, 1 row affected (0.09 sec)
mysql> insert into secondLastDemo(StudentName) values('Bob');
Query OK, 1 row affected (0.10 sec)
mysql> insert into secondLastDemo(StudentName) values('Sam');
Query OK, 1 row affected (0.09 sec)
mysql> insert into secondLastDemo(StudentName) values('Mike');
Query OK, 1 row affected (0.10 sec)
mysql> insert into secondLastDemo(StudentName) values('David');
Query OK, 1 row affected (0.08 sec)
mysql> insert into secondLastDemo(StudentName) values('Maxwell');
Query OK, 1 row affected (0.10 sec)
mysql> insert into secondLastDemo(StudentName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into secondLastDemo(StudentName) values('James');
Query OK, 1 row affected (0.14 sec)
mysql> insert into secondLastDemo(StudentName) values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into secondLastDemo(StudentName) values('Ramit');
Query OK, 1 row affected (0.08 sec)登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from secondLastDemo;
実行結果は以下のとおりです。全部で11件のレコードが登録されています。
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 2 | Carol | | 3 | Bob | | 4 | Sam | | 5 | Mike | | 6 | David | | 7 | Maxwell | | 8 | Robert | | 9 | James | | 10 | Chris | | 11 | Ramit | +-----------+-------------+ 11 rows in set (0.00 sec)
後ろから2番目の行を取得するクエリ
それでは、StudentIdを基準に降順へ並べ替え、LIMIT 1,1で後ろから2番目の行を取得してみましょう。
mysql> select *from secondLastDemo order by StudentId DESC LIMIT 1,1;
出力結果を見ると、最後のレコード(StudentId: 11)のひとつ前である「StudentId: 10 / Chris」が正しく取得できています。
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Chris | +-----------+-------------+ 1 row in set (0.00 sec)
補足:応用テクニック
- N番目に新しい行を取得したい場合:「LIMIT N-1, 1」と指定すれば、任意の順位の行を柔軟に取り出せます。例えば3番目なら「LIMIT 2,1」です。
- 並び順の基準に注意:ORDER BYに指定するカラムが一意でない場合、同じ値を持つ行の順序は保証されないため、AUTO_INCREMENTの主キーなど一意なカラムを指定するのが安全です。
-
JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法
MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI
-
MySQLで日付の最後の1秒(23:59:59)を取得する方法
```html MySQLである日付の「その日の最後の1秒」、つまり 23:59:59 を取得したい場合は、INTERVAL 演算子を使うのが簡単です。この記事では、実際にテーブルを作成し、データを挿入したうえで、日付の最後の1秒を取得するクエリを実行するまでの手順を紹介します。 1. テーブルを作成する まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable -> ( -> JoiningDatetime datetime, -> DueDatetime datetime