MW211 EXIT

devlog
Oracle/一つ前のレコード(埋める編)
2019年05月21日
一つ前のレコードを参照するには、LAG()関数を使う。
じゃ、NULLの場合に一つ前の値を補填してみようとする。
┌──────────────────────────────────────┐
│SELECT NVL("列",                                                            │
│           LAG("列") OVER(PARTITION BY "グループ列"                         │
│                          ORDER BY     "ソート列"   ASC)                    │
│       ) AS "列"                                                            │
│    FROM "表";                                                              │
└──────────────────────────────────────┘
でもこれだと、本当に一つ前しか埋めてくれない。
  列        列
  ----      ----
  1     →  1
  NULL      1     ←ここしか効かない
  NULL      NULL  ←ここが効かない
  ----      ----

なんと、これを一発で解決してくれる優れものがある。
「IGNORE NULLS」オプションだ。
以下のように、LAG()関数につけてあげるだけ。
┌──────────────────────────────────────┐
│SELECT NVL("列",                                                            │
│           LAG("列" IGNORE NULLS) OVER(PARTITION BY "グループ列"            │
│                                       ORDER BY     "ソート列"   ASC)       │
│       ) AS "列"                                                            │
│    FROM "表";                                                              │
└──────────────────────────────────────┘
お望み通りの結果になる。
  列        列
  ----      ----
  1     →  1
  NULL      1
  NULL      1
  ----      ----
分類:Oracle