Associate Data Practitioner 問題の一覧 › 1. データの準備と取り込み
BigQuery のテーブルに、同一の order_id を持つ重複行が含まれています。order_id ごとに最新の updated_at の行のみを残したい場合、最も適切な SQL の方法はどれですか。
- SELECT DISTINCT * をそのまま実行する
- ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY updated_at DESC) を使い、1 の行のみを抽出する
- GROUP BY order_id で全列を SELECT する
- LIMIT 1 を付ける
💡 答えと解説を見る
答え:B(ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY updated_at DESC) を使い、1 の行のみを抽出する)
ウィンドウ関数 ROW_NUMBER で order_id ごとに最新順に番号を振り、1 の行を残すのが定石です。DISTINCT は updated_at が異なれば重複を除去できず、全列の GROUP BY はエラーになり、LIMIT 1 は全体で1行しか返しません。
ウィンドウ関数 ROW_NUMBER で order_id ごとに最新順に番号を振り、1 の行を残すのが定石です。DISTINCT は updated_at が異なれば重複を除去できず、全列の GROUP BY はエラーになり、LIMIT 1 は全体で1行しか返しません。
関連サービス
| LIMIT | 出力行数を減らすだけ。スキャン量(課金)は減らない |
| ウィンドウ関数 | OVER (PARTITION BY .. ORDER BY ..)。累計・順位・LAG/LEAD |
※ 学習用に作成したオリジナル問題です。本番試験とは異なります。