У меня очень специфическая проблема в 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, мне нужно обновить значение предыдущего часа. Если в строке есть несколько нулевых значений, ближайший предыдущий час с ненулевым значением распространяется и заполняет все эти нулевые значения. Кроме того, если первый час дня равен нулю, то самый ранний час дня с ненулевым значением распространяется вниз, например 2 в этом случае. В вашем случае вы можете предположить, что хотя бы одно значение не равно нулю.
Моя цель - решить эту проблему с помощью общих табличных выражений или чего-то подобного. Я думаю, что с помощью курсора у меня будет решение в короткие сроки, если я попытаюсь, но мои попытки с CTE и рекурсивными CTE пока не увенчались успехом.
Value
s не уменьшаются по мере увеличенияDate
. Это совпадение или так будет всегда? - person AakashM   schedule 18.05.2012