Menu
CoddyTech

キーごとに1行を保持

CoddyのSQLジャーニー「応用」セクションの一部。レッスン 26/27。

キー(顧客、センサー、商品)が複数回登場するテーブルがあり、その中で最新のもの、またはスコアが最も高いものだけを残したいことがよくあります。

トップNのときと同じようにROW_NUMBER()を使い、その後rn = 1を残します。

WITH ranked AS (
    SELECT *,
           ROW_NUMBER() OVER (
               PARTITION BY customer_id ORDER BY purchased_at DESC
           ) AS rn
    FROM purchases
)
SELECT * FROM ranked WHERE rn = 1

PARTITION BYは「このキーごとに1つの順位」を意味し、ORDER BYは「新しいものから順に」を意味します。各パーティションの1行目が、残したい行です。

challenge icon

チャレンジ

中級

利用可能なテーブルと列:

  • readings: sensor_id, recorded_at, value

少なくとも3件の読み取り値がある各センサーについて、値が最も高い読み取り値を1件返してください。valueが同じ読み取り値が複数ある場合は、より新しいものを選んでください。

sensor_id、recorded_at、valueを出力し、sensor_idの順に並べてください。

自分で試してみよう

WITH ranked AS (
    -- TODO: 各測定値を、そのセンサー内での順位 (rn) とともに選択する
    -- および、そのセンサーの測定値の数 (total_readings)
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

応用のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド