对于 SQL Server 2008 R2
我有一个看起来像这样的结果集(注意 [price] 是数字,下面的 NULL 表示 NULL 值,结果集按 product_id 和时间戳排序)
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)
但我似乎没有找到任何方法在窗口中执行“累积最新非空值”(将窗口绑定到前面的行,而不是整个分区)
除了创建表值用户定义函数之外,是否有任何内置函数可以完成此操作?
更新:
显然,此功能在“Denali”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