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

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の主キーなど一意なカラムを指定するのが安全です。
  1. JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法

    MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI

  2. MySQLで日付の最後の1秒(23:59:59)を取得する方法

    ```html MySQLである日付の「その日の最後の1秒」、つまり 23:59:59 を取得したい場合は、INTERVAL 演算子を使うのが簡単です。この記事では、実際にテーブルを作成し、データを挿入したうえで、日付の最後の1秒を取得するクエリを実行するまでの手順を紹介します。 1. テーブルを作成する まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable -> ( -> JoiningDatetime datetime, -> DueDatetime datetime