SQL Server 2008 R2 の場合
このような結果セットがあります ([価格] は数値であり、以下の 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
これを、直前の行から 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)
しかし、ウィンドウで「累積的な最新のnull以外の値」を実行する方法が見つからないようです(ウィンドウをパーティション全体ではなく、前の行にバインドするため)
テーブル値のユーザー定義関数を作成する以外に、これを実現するビルトインはありますか?
アップデート:
どうやら、この機能は「デナリ」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