T-SQLに非常に特有の問題があります。
この例のケースを解決できれば、元のケースを解決できると思います。
このデータをテーブルに入れる:
DECLARE @Test TABLE
(
Value INT
,Date DATETIME2(7)
);
INSERT INTO @Test
VALUES
(NULL, '2011-01-01 10:00'),
(NULL, '2011-01-01 11:00'),
(2, '2011-01-01 12:00'),
(NULL, '2011-01-01 13:00'),
(3, '2011-01-01 14:00'),
(NULL, '2011-01-01 15:00'),
(NULL, '2011-01-01 16:00'),
(4, '2011-01-01 17:00'),
(NULL, '2011-01-01 18:00'),
(5, '2011-01-01 19:00'),
(6, '2011-01-01 20:00')
この出力を選択する必要があります:
Value Date
2 2011-01-01 10:00
2 2011-01-01 11:00
2 2011-01-01 12:00
2 2011-01-01 13:00
3 2011-01-01 14:00
3 2011-01-01 15:00
3 2011-01-01 16:00
4 2011-01-01 17:00
4 2011-01-01 18:00
5 2011-01-01 19:00
6 2011-01-01 20:00
説明するため。値がどこかでNULLの場合、前の1時間の値で更新する必要があります。行に複数のnull値がある場合、null以外の値を持つ最も近い前の時間に伝播し、これらすべてのnull値を埋めます。また、その日の最初の時間がnullの場合、null以外の値を持つその日の最も早い時間は、この場合は2のように下向きに伝播します。あなたの場合、少なくとも1つの値がnull以外の値であると想定できます。
私の野心は、一般的なテーブル式などでこれを解決することです。カーソルの方法で試してみると、短時間で解決策が得られると思いますが、CTEと再帰CTEでの試みはこれまで失敗しました。