для SQL Server 2008 R2
У меня есть набор результатов, который выглядит следующим образом (примечание [цена] является числовым, NULL ниже представляет собой
Значение NULL, результирующий набор упорядочен по product_id и timestamp)
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
Я хочу преобразовать это в набор результатов, который (по существу) копирует ненулевое значение из последней предыдущей строки, чтобы получить набор результатов, который выглядит следующим образом:
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
Я не нашел ни одной агрегатной / оконной функции, которая позволила бы мне это сделать (опять же, это ТОЛЬКО необходимо для SQL Server 2008 R2.)
Я надеялся найти аналитическую агрегатную функцию, которая сделает это для меня, что-то вроде ...
LAST_VALUE(price) OVER (PARTITION BY product_id ORDER BY timestamp)
Но я, похоже, не нашел способа сделать "кумулятивное последнее ненулевое значение" в окне (чтобы связать окно с предыдущими строками, а не со всем разделом)
Помимо создания табличной пользовательской функции, есть ли встроенная функция, которая могла бы выполнить это?
UPDATE:
По-видимому, эта функциональность доступна в CTP «Денали», но не в SQL Server 2008 R2.
LAST_VALUE http://msdn.microsoft.com/en-us/library/hh231517%28v=SQL.110%29.aspx
Я только ожидал, что он будет доступен в SQL Server 2008. Он доступен в Oracle (по крайней мере, начиная с 10gR2), и я могу сделать нечто подобное в MySQL 5.1, используя локальную переменную.
http://download.oracle.com/docs/cd/E14072_01/server.112/e10592/functions083.htm