для 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)
Но я, похоже, не нахожу никакого способа сделать "совокупное последнее ненулевое значение" в окне (чтобы привязать окно к предыдущим строкам, а не ко всему разделу)
Помимо создания определяемой пользователем функции, возвращающей табличное значение, есть ли какая-нибудь встроенная функция, которая могла бы выполнить это?
ОБНОВЛЕНИЕ:
По-видимому, эта функция доступна в CTP 'Denali', но не в 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