5
4

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で最新レコードを取得する2つの方法

Posted at

概要

データベースの特定のテーブルから最新の情報を取得するケースがしばしばあります。
私が知っている代表的な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の中で最も最近更新された名前と価格の情報を取得します。

5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?