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

MySQLでIDの降順(DESC)に並べたテーブルから最上位のレコードを取得する方法

概要

テーブル内で最も新しい(IDが最大の)レコードを1件だけ取得したい場合は、ORDER BY 句で DESC(降順)を指定し、LIMIT 1 を組み合わせるのが基本的な方法です。これにより、IDの降順で並べ替えた結果の先頭行、すなわちIDが最も大きいレコードを効率的に取り出せます。

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
   -> (
   -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> UserName varchar(100),
   -> UserMessage text
   -> );
Query OK, 0 rows affected (1.17 sec)

次に、INSERT文を使ってテーブルにレコードをいくつか登録します。

mysql> insert into DemoTable(UserName,UserMessage) values('Adam','Hi');
Query OK, 1 row affected (0.92 sec)

mysql> insert into DemoTable(UserName,UserMessage) values('Chris','Awesome');
Query OK, 1 row affected (0.52 sec)

mysql> insert into DemoTable(UserName,UserMessage) values('Robert','Nice');
Query OK, 1 row affected (0.65 sec)

mysql> insert into DemoTable(UserName,UserMessage) values('David','Good Morning!!!');
Query OK, 1 row affected (0.12 sec)

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

mysql> select *from DemoTable;

出力結果

上記のクエリを実行すると、次のような出力が得られます。

+----+----------+-----------------+
| Id | UserName | UserMessage |
+----+----------+-----------------+
| 1 | Adam | Hi |
| 2 | Chris | Awesome |
| 3 | Robert | Nice |
| 4 | David | Good Morning!!! |
+----+----------+-----------------+
4 rows in set (0.00 sec)

最上位(最新)のレコードを取得するクエリ

それでは本題です。テーブルから最上位のレコード(この例ではIDが最大のレコード)を取得するには、以下のようにクエリを記述します。

mysql> select *from DemoTable order by Id DESC limit 1;

出力結果

実行結果は次のとおりです。

+----+----------+-----------------+
| Id | UserName | UserMessage |
+----+----------+-----------------+
| 4 | David | Good Morning!!! |
+----+----------+-----------------+
1 row in set (0.00 sec)

解説

このクエリのポイントは以下の2点です。

order by Id DESC: Idカラムを基準にレコードを降順(大きい値から小さい値へ)に並べ替えます。AUTO_INCREMENTの主キーを使用している場合、IDが最も大きいレコードは通常、最後に追加されたデータに相当します。

limit 1: 並べ替えた結果のうち最初の1件だけを返すよう制限します。これにより、不要な行まで取得することなく、目的のレコードだけを効率的に取り出せます。

この方法は、「最新の投稿を1件表示したい」「直近のログを取得したい」といったケースで非常によく使われる定番のテクニックです。

  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で月ごとにテーブルの合計値を集計する方法

    MySQLで日付データを月単位にグループ化して合計値を求めたい場合、GROUP BY句とMONTH()関数を組み合わせることで簡単に実現できます。この記事では、実際のサンプルを使いながら手順を詳しく解説します。1. サンプルテーブルの作成まず、購入日と金額を格納するテーブルを作成します。mysql> create table DemoTable1628 -> ( -> PurchaseDate date, -> Amount int -> ); Query OK, 0 rows affected (1.55 sec)2. テストデー