「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

SQLで集計や分析をしていると、

  • 1つ前の行の値と比較したい

  • 次の行の値を参照したい

  • 前回との差分を出したい

といったケースは非常によくあります。

このようなときに使うのが、ウィンドウ関数(分析関数)の
LAGLEAD です。

この記事では、

  • 前の行の値を取得する方法

  • 後の行の値を取得する方法

  • よくある使用例

  • DBごとの対応状況

を分かりやすく解説します。

SQL:前の行の値、後の行の値を取得したい時は


前の行の値を取得する:LAG関数

基本構文

使用例

実行イメージ

idsalesprev_sales
1100NULL
2120100
3150120

👉 1つ前の行の値が取得できます。


後の行の値を取得する:LEAD関数

基本構文

使用例

実行イメージ

idsalesnext_sales
1100120
2120150
3150NULL

👉 1つ後の行の値が取得できます。


差分を計算する(前回との差)

結果例

idsalesdiff_sales
1100NULL
212020
315030

📌 売上増減・ログの変化量・履歴比較で非常によく使われます。


デフォルト値を指定する

先頭行・最終行では NULL になるのが困る場合、
第3引数でデフォルト値を指定できます。

👉 前の行が存在しない場合は 0 が入ります。


PARTITION BY でグループごとに比較する

📌 カテゴリ別・ユーザー別・日付別など
グループ単位で前後行を比較できます。


対応している主なDB

DBLAG / LEAD
Oracle
PostgreSQL
SQL Server
MySQL○(8.0以降)
MariaDB○(10.2以降)

※ MySQL 5.x では使用できないため注意してください。


まとめ

  • 前の行を取得 → LAG

  • 後の行を取得 → LEAD

  • 差分計算・履歴比較・ランキング分析に必須

  • OVER (ORDER BY ...) を忘れない

  • 必要に応じて PARTITION BY を使う

SQLで「前後の行を参照したい」と思ったら、
まず LAG / LEAD を思い出すのが王道です。

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x