対象レコードより前のレコード値を取得する(LAG関数)
SELECT
target_date
, item_cd
, price,
-- 第2引数で遡るステップ数を指定 ここでは2つ前のレコードのpriceを取得
LAG(price, 2) OVER (PARTITION BY item_cd ORDER BY target_date) AS before_2days_price,
-- 第2引数を指定しない時は1つ前のpirceを取得
LAG(price) OVER (PARTITION BY item_cd ORDER BY target_date) AS before_1days_price,
--第3引数で1つ前のレコードが存在しない場合のデフォルト値を指定 以下では0を設定
LAG(price, 1, 0) OVER (PARTITION BY item_cd ORDER BY target_date) AS before_1days_price_null_is_0
FROM
item_sales
ORDER BY
1, 2
対象レコードの後ろのレコード値を取得する(LEAD関数)
SELECT
target_date
, item_cd
, price,
-- 第2引数で後ろへ行くステップ数を指定 ここでは2つ後のレコードのpriceを取得
, LEAD(price, 2) OVER (PARTITION BY item_cd ORDER BY target_date) AS after_2days_price
-- 第2引数を指定しない時は1つ後のpirceを取得
, LEAD(price) OVER (PARTITION BY item_cd ORDER BY target_date) AS after_1days_price
--第3引数で1つ後のレコードが存在しない場合のデフォルト値を指定 以下では0を設定
, LEAD(price, 1, 0) OVER (PARTITION BY item_cd ORDER BY target_date) AS after_1days_price_null_is_0
FROM
item_sales
ORDER BY
1, 2