MySQLでIDが最も大きい行のみを表示する方法
テーブルの中から最も大きなIDを持つ行だけを取得したい場合、「ORDER BY Id DESC」で降順に並べ替えたうえで「LIMIT 1」を組み合わせることで実現できます。降順ソートの先頭、すなわちIDが最大のレコードを1件だけ取り出す仕組みです。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable ( Id int, FirstName varchar(50) ); Query OK, 0 rows affected (0.83 sec)
レコードの挿入
次に、insertコマンドを使って複数のレコードを登録します。
mysql> insert into DemoTable values(100,'Chris'); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(110,'Robert'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(120,'Mike'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(115,'Bob'); Query OK, 1 row affected (0.14 sec)
すべてのレコードを確認する
select文ですべてのレコードを表示して、データの中身を確認しておきましょう。
mysql> select *from DemoTable;
上記のクエリを実行すると、以下のような結果が得られます。
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Chris | | 110 | Robert | | 120 | Mike | | 115 | Bob | +------+-----------+ 4 rows in set (0.00 sec)
IDが最大の行を取得するクエリ
ここからが本題です。「ORDER BY Id DESC」でIDを降順に並べ替え、「LIMIT 1」で先頭の1件のみを取得することで、IDが最も大きい行だけを表示できます。
mysql> select *from DemoTable order by Id DESC LIMIT 1;
実行結果は以下の通りです。ID「120」のMikeというレコード、つまり最も大きなIDを持つ行だけが正しく取得できています。
+------+-----------+ | Id | FirstName | +------+-----------+ | 120 | Mike | +------+-----------+ 1 row in set (0.00 sec)
補足:MAX関数を使う方法
なお、IDの最大値そのものを知りたいだけであれば、「SELECT MAX(Id) FROM DemoTable」というようにMAX集計関数を使う方法もあります。ただし、この方法では他のカラム(FirstNameなど)の値は取得できません。行全体を丸ごと取り出したいケースでは、本記事で紹介した「ORDER BY 〜 DESC」と「LIMIT 1」の組み合わせが最もシンプルで便利です。
-
MySQLでIN句に指定した値のみを任意の順序で表示する方法
MySQLでIN句に指定した値のみを任意の順序で表示する方法MySQLでは、IN()とORDER BY句、さらにFIELD()関数を組み合わせることで、IN句内に指定した値だけを、希望する独自の順序で表示できます。通常のORDER BYは昇順・降順のソートしかできませんが、FIELD()関数を使えば自由に並び順を定義できるのがポイントです。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1986(Number int);Query OK, 0 rows affected (0.00 sec)次に、INSERTコマ
-
MySQLで重複行を除外して1行だけ取得する方法(DISTINCTの使い方)
MySQLで重複行から1行のみを返すには?MySQLのテーブルに同じ値を持つ重複行が存在する場合、DISTINCTキーワードを使うことで、重複を排除した一意な行だけを取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、DISTINCTによる重複除去の手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1998 ( Name varchar(20) ); Query OK, 0 rows affected (0.61 sec)2. レコードを挿入するINSERTコマンドを