8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLで最新レコードを取得する3つの方法

Last updated at Posted at 2023-11-27

概要

データベースの特定のテーブルから最新の情報を取得するケースがしばしばあります。
私が知っている代表的な2つやり方について、架空の例で説明します。

テーブルの状態

ChatGPTで出力した適当な例なので不自然さがありますが、そこは目をつぶってください🙇‍♂️

product_id name price updated_at
1 スマートフォン 50000 2023-11-01 09:30:00
2 ノートPC 80000 2023-11-02 10:15:00
3 イヤホン 15000 2023-11-01 11:20:00
1 スマートフォンX 55000 2023-11-03 08:45:00
2 ノートPC Pro 120000 2023-11-05 12:00:00
4 タブレット 45000 2023-11-04 14:30:00
3 イヤホンPlus 20000 2023-11-03 16:00:00

Group ByとJOINを使用するやり方

製品IDごとに最新の名前と価格を取得するには、以下の手順が必要です。

手順

  1. 各製品IDの最後の更新日時をサブクエリで特定する。
  2. このサブクエリの結果を元のproductテーブルとJOINする。
  3. 最後に、必要なカラム(製品ID、名前、価格)を選んで結果を取得する。

SQLの例

SELECT p.product_id, p.name, p.price
FROM product p
JOIN (
    SELECT product_id, MAX(updated_at) AS latest_update
    FROM product
    GROUP BY product_id
) latest_product ON p.product_id = latest_product.product_id AND p.updated_at = latest_product.latest_update

このクエリにより、各製品IDごとの最新の名前と価格を取得できます。

Order ByとLIMITを使用

特定の製品IDに関して、最新の状態(名前と価格)を知りたい場合、以下の方法が便利です。更新日時で降順にソートし、LIMITを使って特定製品の最新の1件を取得します。

SQLの例

SELECT product_id, name, price
FROM product
WHERE product_id = [特定の製品ID]
ORDER BY updated_at DESC
LIMIT 1;

このクエリでは、指定した製品IDの中で最も最近更新された名前と価格の情報を取得します。

以下に、あなたのブログのスタイルとトーンを維持しながら、「ウィンドウ関数を使う方法」セクションを追記しました。コピペで追加できる形式にしています。

ウィンドウ関数を使用するやり方

各製品IDごとに最新の情報を取得するもう1つの強力な方法が「ウィンドウ関数」を使うやり方です。

概要

ウィンドウ関数の ROW_NUMBER() を使うことで、「製品IDでグルーピングし、更新日時が新しい順に並べ、先頭の1件だけを取得する」という処理を、シンプルかつ高速に実現できます。

手順

  1. ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY updated_at DESC) で、各グループ内の最新レコードに「1番」を振る。
  2. WHERE row_number = 1 で最新だけを取り出す。

SQLの例

SELECT product_id, name, price
FROM (
    SELECT product_id, name, price,
           ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY updated_at DESC) AS rn
    FROM product
) ranked
WHERE rn = 1;

このクエリでは、各 product_id グループ内で updated_at の降順に並べた上で、最初の1件だけを取得します。

8
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?