概要
データベースの特定のテーブルから最新の情報を取得するケースがしばしばあります。
私が知っている代表的な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ごとに最新の名前と価格を取得するには、以下の手順が必要です。
手順
- 各製品IDの最後の更新日時をサブクエリで特定する。
- このサブクエリの結果を元の
product
テーブルとJOINする。 - 最後に、必要なカラム(製品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の中で最も最近更新された名前と価格の情報を取得します。