Montag, Juli 04, 2016

Default für Lead und Lag Funktionen

Eine Lösung für ein kleines Problem, dem ich mit den analytischen Funktionen LEAD und LAG schon häufiger begegnet bin, findet man bei Connor McDonald: an den Grenzen eines durch die analytischen Funktionen definierten Fensters erhält man üblicherweise einen NULL-Wert - also etwa dann, wenn man nach dem Vorgängerwert für den ersten Satz eines Ergebnisses sucht. Diesen Fall kann man mit einer NVL-Funktion abfangen, aber eleganter und kürzer ist die Verwendung eines default-Wertes, den die analytische Funktion als dritten Parameter (nach value_expr und offset) annimmt:

create table t
as
select rownum id
  from dual
connect by level <= 10;

select id
     , lag(id) over(order by id) lag_id1
     , nvl(lag(id) over(order by id), 0) lag_id2
     , lag(id, 1, 0) over(order by id) lag_id3
  from t;

ID    LAG_ID1    LAG_ID2    LAG_ID3
-- ---------- ---------- ----------
 1                     0          0
 2          1          1          1
 3          2          2          2
 4          3          3          3
 5          4          4          4
 6          5          5          5
 7          6          6          6
 8          7          7          7
 9          8          8          8
10          9          9          9

Ich vergesse auch die offset-Option gerne und komme mal wieder zum Ergebnis, dass es gelegentlich noch mal nützlich wäre, die Dokumentation gründlich zu lesen.

Keine Kommentare:

Kommentar veröffentlichen