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