【发布时间】:2011-10-26 01:55:12
【问题描述】:
对于 SQL Server 2008 R2
我有一个看起来像这样的结果集(注意 [price] 是数字,下面的 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)
但我似乎没有找到任何方法在窗口中执行“累积最新非空值”(将窗口绑定到前面的行,而不是整个分区)
除了创建一个表值的用户定义函数之外,是否有任何内置函数可以完成此操作?
更新:
显然,此功能在“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
【问题讨论】:
-
您的意思是哪个功能在 Denali 中可用,但在 2008 R2 中不可用??
标签: sql-server aggregate-functions sql-server-2008-r2 analytic-functions