我在T-SQL中有一個非常具體的問題。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。在你的情況下,你可以假設至少有一個值是非空值。
我的目標是用Common table表達式或類似的東西來解決這個問題。用光標的方式,我想如果我嘗試一下,我會在短時間內得到解決方案,但是到目前爲止,我對CTE和遞歸CTE的嘗試失敗了。
你有什麼索引樹d?發佈迄今爲止已完成的工作很有幫助 - 您可能會接近並需要一些建議來糾正您的現有查詢。 – Taryn
由於我不知道在一行中有多少個空值,因此前一小時的單個連接是不夠的。在那裏,我想也許我可以通過某種方式用遞歸來解決它。我只使用CTE遞歸經典的層次結構方式,但我的想法是,如果我可以每次在遞歸中更新一個空值,也許我可以填充它們。事實上,當我嘗試這個想法時,我很早就失去了它。所以我不相信這會有很多幫助。 – John
在你的例子中,隨着Date的增加,Value的值不減。這是巧合,還是會一直如此? – AakashM