针对 SQL Server 2008 R2
我有一个结果集,长这样(注意 [price] 是数值型,在下方的 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