我有一个带有空值的时间序列。我想将每个null值替换为最新的non-non值。根据我的研究,Oracle SQL可以使用带有IGNORE NULLS的Last_value轻松完成此操作。是否有使用SQL Server 2016来完成此任务的类似方法?否则,我将仅使用C#对其进行编码,但是觉得使用SQL会更快,更清洁,更容易。
Sec SCORE 1 Null 2 Null 3 5 4 Null 5 8 6 7 7 Null
应替换为:
Sec SCORE 1 Null 2 Null 3 5 4 5 5 8 6 7 7 7
您可以通过两个累积操作来执行此操作:
select t.*, coalesce(score, max(score) over (partition by maxid)) as newscore from (select t.*, max(case when score is not null then id end) over (order by id) as maxid from t ) t;
最里面的子查询获取有值的最新ID。最外层的那个值“扩展”到随后的行。
如果您确实要更新表格,则可以轻松地将其合并到中update。但是,Oracle无法轻松做到这一点,所以我猜想这是没有必要的。
update