dla SQL Server 2008 R2zastąpić wartości NULL z najnowszej wartości niezerowe w serii wynikowego (SQL Server 2008 R2)
Mam zestaw wyników, który wygląda tak (uwaga [cen] jest numeryczny, NULL poniżej reprezentuje wartość NULL, zestaw wyników jest sortowana według product_id i datownika)
product timestamp price
------- ---------------- -----
5678 2008-01-01 12:00 12.34
5678 2008-01-01 12:01 NULL
5678 2008-01-01 12:02 NULL
5678 2008-01-01 12:03 23.45
5678 2008-01-01 12:04 NULL
chcę przekształcić że do zestawu wyników, które (w zasadzie) kopiuje niezerowe wartości od najnowszej poprzedniego rzędu, w celu wytworzenia resultset to wygląda tak:
product timestamp price
------- ---------------- -----
5678 2008-01-01 12:00 12.34
5678 2008-01-01 12:01 12.34
5678 2008-01-01 12:02 12.34
5678 2008-01-01 12:03 23.45
5678 2008-01-01 12:04 23.45
nie znajdę żadnej funkcji agregat/okienkowy, który pozwoli mi na to (znowu to tylko potrzebne dla SQL Server 2008 R2).
Miałem nadzieję znaleźć analityczną łączną funkcję, która zrobi to za mi, coś jak ...
LAST_VALUE(price) OVER (PARTITION BY product_id ORDER BY timestamp)
Ale nie wydaje się znaleźć jakiś sposób, aby zrobić „skumulowany ostatnią niezerową wartość” w oknie (na związanie się okno do poprzednich wierszach, zamiast cała partycja)
Oprócz tworzenia zdefiniowanej przez użytkownika funkcji o wartości tabelarycznej, Czy jest jakiś wbudowany, który by to wykonał?
UPDATE:
Najwyraźniej ta funkcja jest dostępna w 'Denali' CTP, ale nie w SQL Server 2008 R2.
LAST_VALUE http://msdn.microsoft.com/en-us/library/hh231517%28v=SQL.110%29.aspx
po prostu spodziewałem się, że jest dostępny w SQL Server 2008. Jest ona dostępna w Oracle (od 10gR2 przynajmniej), i mogę zrobić coś podobnego w MySQL 5.1, przy użyciu zmiennej lokalnej.
http://download.oracle.com/docs/cd/E14072_01/server.112/e10592/functions083.htm
Która funkcja to znaczy, że jest dostępny w Denali, ale nie 2008 R2 ?? –