モジュール 13 · レッスン 4 / 4コース内の 52/57~12 min
モジュールのレッスン (4/4)
シフト: LAG と LEAD
シフト: LAG と LEAD
順次データと時間ベースのデータでは、多くの場合、現在の行を前日の行と比較する必要があります。 「標準」SQL では、これを行うには非常に危険な (そして非常に遅い) 自己結合が必要になります。
LAG() (前の行) 関数と LEAD() (次の行) 関数は、この問題を極めて機敏かつ優雅に解決します。
過去と未来を見つめる
SQL
SELECT
created_at,
total_amount,
LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;この例では、各行には同じテーブルによって生成された量が 1 行ずつ前方に (時間的には後方に) シフトされて保持されます。 total_amount - LAG(...) を簡単に減算して、差や前月比の変化率を計算できます。
同様に、LEAD() は、現在の行のすぐ下の行から値を取得します。
運動#sql.m13.l4.e1
試行回数: 0読み込み中…
「products」テーブルから「id」、「launched_on」、「price」を抽出し、「prev_price」、つまり論理的に「前」のものとみなされる製品の「価格」を「launched_on」の昇順で追加します。
エディターを読み込み中…
ヒントを表示
LAG(価格) OVER(ORDER BY launch_on ASC) を使用します
3 回の試行後に解決策が利用可能になります
運動#sql.m13.l4.e2
試行回数: 0読み込み中…
個々のユーザーごとの評価の上昇をどのように計算しますか?それをシミュレートします。「reviews」テーブルから「customer_id」、「created_at」、「評価」、および「next_評価」(一定期間にわたる同じ顧客の次のレビュー)を抽出します。したがって、「customer_id」で分割し、「created_at」で順序付けし、適切なウィンドウ関数を使用して先を確認します。
エディターを読み込み中…
ヒントを表示
LEAD() と PARTITION BY および ORDER BY を OVER で使用します。
3 回の試行後に解決策が利用可能になります