Jak mogę powiedzieć funkcji LGD, aby uzyskać ostatnią wartość "nie zerową"?Funkcje LGD i NULLS
Na przykład zobacz tabelę poniżej, gdzie mam kilka wartości NULL w kolumnach B i C. Chciałbym wypełnić wartości zerowe ostatnią wartość inną niż null. Próbowałem to zrobić za pomocą funkcji LGD, tak:
case when B is null then lag (B) over (order by idx) else B end as B,
ale to nie do końca pracy, gdy mam dwie lub więcej wartości null w rzędzie (patrz wartość NULL w kolumnie C rzędu 3 - I "Chciałbym, żeby było 0,50 jako oryginału).
Każdy pomysł, w jaki sposób mogę to osiągnąć? (nie muszą być za pomocą funkcji LGD, wszelkie inne pomysły są mile widziane)
Kilka założenia:
- Liczba wierszy jest dynamiczna;
- Pierwsza wartość zawsze będzie miała wartość inną niż null;
- Kiedy już mam NULL, jest NULL aż do końca - więc chcę wypełnić go najnowszą wartością.
Dzięki
Itzik Ben-Gan napisał blog dotyczący tego problemu: http://sqlmag.com/sql-server/how-previous-and-next-condition. Niefortunny SQL Server nie obsługuje opcji 'IGNORE NULLS' w' LAST_VALUE', wtedy jest to proste: 'LAST_VALUE (B IGNORE NULLS) OVER (ORDER BY idx)'. – dnoeth